Difference between revisions of "GET"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
Line 29: Line 29:
  
  
''Example 2:'' Using a [[TYPE]] record variable to read a TYPE record(Contact).
+
''Example 2:'' Opening a RANDOM file using LEN to calculate and LEN = to designate the file record size.
 +
{{CodeStart}} '' ''
 +
{{Cl|TYPE}} variabletype
 +
  x {{Cl|AS}} {{Cl|INTEGER}}'      '2 bytes
 +
  y {{Cl|AS}} {{Cl|STRING}} * 10'  '10 bytes
 +
  z {{Cl|AS}} {{Cl|LONG}}'          '4 bytes
 +
{{Cl|END}} {{Cl|TYPE}}'            '16 bytes total
 +
{{Cl|DIM}} record {{Cl|AS}} variabletype
 +
{{Cl|DIM}} newrec {{Cl|AS}} variabletype
 +
 
 +
file$ = "testrand.inf" '<<<< filename may overwrite existing file
 +
number% = 1 '<<<<<<<<<< record number to write cannot be zero
 +
RecordLEN% = {{Cl|LEN}}(record)
 +
{{Cl|PRINT}} RecordLEN%; "bytes"
 +
record.x = 255
 +
record.y = "Hello world!"
 +
record.z = 65535
 +
{{Cl|PRINT}} record.x, record.y, record.z
 +
 
 +
{{Cl|OPEN}} file$ {{Cl|FOR...NEXT|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #1 {{Cl|LEN}} = RecordLEN%
 +
{{Cl|PUT}} #1, number% , record 'change record position number to add records
 +
{{Cl|CLOSE}} #1
 +
 
 +
{{Cl|OPEN}} file$ {{Cl|FOR...NEXT|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #2 {{Cl|LEN}} = RecordLEN%
 +
NumRecords% = {{Cl|LOF}}(2) \ RecordLEN%
 +
PRINT NumRecords%; "records"
 +
 
 +
{{Cl|GET}} #2, NumRecords% , newrec 'GET last record available
 +
{{Cl|CLOSE}} #2
 +
{{Cl|PRINT}} newrec.x, newrec.y, newrec.z
  
{{CodeStart}}
+
{{Cl|END}} '' ''
OPEN file$ FOR RANDOM as #1 LEN = LEN(Contact)
 
IF record% <= {{Cl|LOF}}(1) \ LEN(Contact) THEN GET #1, record%, Contact
 
CLOSE #1
 
 
{{CodeEnd}}
 
{{CodeEnd}}
 
+
{{OutputStart}} 16 bytes
''Note:'' The Contact record contains all of the DOT variable types listed in the TYPE.
+
255        Hello worl      65535
 +
1 records
 +
255        Hello worl      65535
 +
{{OutputEnd}}
 +
: ''Explanation:'' The byte size of the record [[TYPE]] determines the [[LOF]] byte size of the file and can determine the number of records.
 +
: To read the last record [[GET]] the number of records. To add a record, use the number of records + 1 to [[PUT]] new record data.
  
  
Line 78: Line 109:
 
* [[INPUT (file statement)|INPUT #]], [[GET (TCP/IP statement)]]
 
* [[INPUT (file statement)|INPUT #]], [[GET (TCP/IP statement)]]
 
* [[FIELD]], [[RANDOM]], [[BINARY]]
 
* [[FIELD]], [[RANDOM]], [[BINARY]]
 +
* [[LEN]], [[LOF]], [[EOF]]
  
  
 
{{PageNavigation}}
 
{{PageNavigation}}

Revision as of 17:11, 26 August 2012

The GET # file or port device statement reads data by bytes or record positions.


Syntax

GET #filenumber%, [position][, {holdingvariable|holdingarray()}]


  • File/port number is the file number used in the OPEN AS BINARY or RANDOM statement.
  • The INTEGER or LONG byte position in a BINARY file or the record position in a RANDOM file must be greater than zero.
  • The position can be omitted if the GETs are consecutive based on the holding variable TYPE byte size.
  • The holding variable TYPE or FIELD variable size determines the byte size and the next position in the file.
  • The first file position is 1. This may require adding one to an offset value when documentation uses that position as 0.
  • GET does NOT require a byte or record position or holding variable(or comma) when using a FIELD statement!
  • QB64 can PUT the entire contents of an array to a file and later GET those contents to a holding array(include brackets).
  • GET can ignore an EOF statement and return bad data! EOF after a GET denotes that the data is bad!


Example 1: Checking for End of File before transferring individual GET data.

DO UNTIL EOF(1) GET #1, , value% IF NOT(EOF(1)) THEN PUT #2, , value% LOOP


Example 2: Opening a RANDOM file using LEN to calculate and LEN = to designate the file record size.

TYPE variabletype x AS INTEGER' '2 bytes y AS STRING * 10' '10 bytes z AS LONG' '4 bytes END TYPE' '16 bytes total DIM record AS variabletype DIM newrec AS variabletype file$ = "testrand.inf" '<<<< filename may overwrite existing file number% = 1 '<<<<<<<<<< record number to write cannot be zero RecordLEN% = LEN(record) PRINT RecordLEN%; "bytes" record.x = 255 record.y = "Hello world!" record.z = 65535 PRINT record.x, record.y, record.z OPEN file$ FOR RANDOM AS #1 LEN = RecordLEN% PUT #1, number% , record 'change record position number to add records CLOSE #1 OPEN file$ FOR RANDOM AS #2 LEN = RecordLEN% NumRecords% = LOF(2) \ RecordLEN% PRINT NumRecords%; "records" GET #2, NumRecords% , newrec 'GET last record available CLOSE #2 PRINT newrec.x, newrec.y, newrec.z END

16 bytes 255 Hello worl 65535 1 records 255 Hello worl 65535

Explanation: The byte size of the record TYPE determines the LOF byte size of the file and can determine the number of records.
To read the last record GET the number of records. To add a record, use the number of records + 1 to PUT new record data.


Example 3: Placing the contents of a numerical array into a BINARY file. You may want to put the array size at the beginning too.

DIM SHARED array(100) AS INTEGER FOR i = 1 TO 100 array(i) = i NEXT showme 'display array contents OPEN "BINFILE.BIN" FOR BINARY AS #1 PUT #1, , array() ERASE array 'clear element values from array and display empty showme CLOSE #1 OPEN "BINFILE.BIN" FOR BINARY AS #2 GET #2, , array() CLOSE #2 showme 'display array after transfer from file END SUB showme FOR i = 1 TO 100 PRINT array(i); NEXT PRINT "done" END SUB

Note: Use empty brackets in QB64 when using GET to create an array or PUT to create a BINARY data file.


See also:



Navigation:
Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page