1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-29 10:30:36 +00:00
QB64-PE/internal/help/FIELD.txt
SteveMcNeill 33adc04fc4 Add temp folder to repo. It's necessary as well!
Just more initial setting on... nothing much to see here.
2022-04-28 13:39:56 -04:00

92 lines
4.3 KiB
Plaintext

The [[FIELD]] statement creates a [[STRING]] type definition for a [[RANDOM|random]]-access file buffer.
{{PageSyntax}}
: [[FIELD]] [#]{{Parameter|fileNumber&}}, {{Parameter|fieldWidth1%}} AS {{Parameter|variable1$}}[, {{Parameter|fieldWidthN%}} AS {{Parameter|variableN$}}]
{{PageDescription}}
* {{Parameter|fileNumber%}} is a file number used in the [[OPEN]] statement or a value from the [[FREEFILE]] function.
* Combined size of the {{Parameter|fieldWidth%}} parameters '''must not exceed the [[LEN]] = recordsize in the [[RANDOM]] [[OPEN]] statement''' or a [[ERROR Codes|"FIELD overflow" error]] will occur.
* Variables are limited to [[STRING]] types. Use [[TYPE]] instead of FIELD if you want to use numerical values.
* Once a [[FIELD]] is defined in a statement, [[GET]] can read and [[PUT]] can write data without placeholders or variables.
* [[LSET]], [[RSET]], [[PRINT (file statement)|PRINT #]], [[PRINT USING (file statement)|PRINT # USING]], and [[WRITE (file statement)|WRITE #]] can be used to place characters in the file buffer before a [[PUT]].
* All field definitions for a file are removed when the file is [[CLOSE|closed]] or [[RESET]] and all strings are set to null ("").
* '''Do not re-assign a field defined variable value or use it in an [[INPUT]] statement if you want the variable to remain a field'''.
{{PageExamples}}
''Example:'' Comparing a [[TYPE]] definition with a FIELD [[STRING|string]] definition. Demo using a [[TYPE]] definition to create a file:
{{CodeStart}} '' ''
{{Cl|TYPE}} ClientType
CName {{Cl|AS}} {{Cl|STRING}} * 30 '30 bytes
Address {{Cl|AS}} {{Cl|STRING}} * 30 '30 bytes
City {{Cl|AS}} {{Cl|STRING}} * 15 '15 bytes
State {{Cl|AS}} {{Cl|STRING}} * 2 ' 2 bytes
Zip {{Cl|AS}} {{Cl|STRING}} * 5 ' 5 bytes
{{Cl|END}} {{Cl|TYPE}} ' total size = 82 bytes
{{Cl|DIM}} Client {{Cl|AS}} ClientType
RecordLEN = {{Cl|LEN}}(Client) 'find the size of each TYPE record
{{Cl|OPEN}} "ADDRESS.DAT" {{Cl|FOR (file statement)|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #1 {{Cl|LEN}} = RecordLEN
{{Cl|RESTORE}} ClientData 'restore to start of DATA
record = 0
{{Cl|DO}}
{{Cl|READ}} CName$, Address$, City$, State$, Zip$ 'read DATA
{{Cl|IF}} CName$ = "END" {{Cl|THEN}} {{Cl|EXIT DO}}
record = record + 1 'increment record number
Client.CName = CName$
Client.Address = Address$
Client.City = City$
Client.State = State$
Client.Zip = Zip$
{{Cl|PUT}} #1, record, Client 'PUT by record number
{{Cl|LOOP}}
{{Cl|CLOSE}} #1
{{Cl|END}}
ClientData:
{{Cl|DATA}} "Bob White","104 Birdland Rd.","Bellview","PA","15236"
{{Cl|DATA}} "Ward Cleaver","123 W. Beaver St.","Beaver","PA","15255"
{{Cl|DATA}} "Elmer Fudd","45 Wabbit St.","Bethel Park","PA","15022"
{{Cl|DATA}} "Wyley Coyote","33 Roadrunner Ave.","Clairton","PA","15122"
{{Cl|DATA}} "Jim Morrison","19 Doorway Dr.","Belleview","PA","15236"
{{Cl|DATA}} "END",0,0,0,0 '' ''
{{CodeEnd}} '' ''
Demo using the FIELD statement to read the file:
{{CodeStart}} '' ''
{{Cl|CONST}} NM = 30, AD = 30, CT = 15, ST = 2, ZC = 5 ' Define field and record lengths with constants.
{{Cl|CONST}} RLEN = NM + AD + CY + ST + ZC
'
{{Cl|OPEN}} "ADDRESS.DAT" {{Cl|FOR (file statement)|FOR}} {{Cl|RANDOM}} {{Cl|AS}} #1 {{Cl|LEN}} = RLEN
{{Cl|FIELD}} #1, NM {{Cl|AS}} CName$, AD {{Cl|AS}} Address$, CY {{Cl|AS}} City$, ST {{Cl|AS}} State$, ZC {{Cl|AS}} Zip$
{{Cl|FIELD}} #1, RLEN {{Cl|AS}} Clist$ 'define entire record
{{Cl|GET}} #1, 1 'GET does not need a variable to read FIELD records!
'Read file for zip codes from 15230 to 15239 .
{{Cl|DO}} {{Cl|WHILE}} {{Cl|NOT}} {{Cl|EOF}}(1)
ZipCheck$ = Zip$ 'read zip codes
{{Cl|IF}} (ZipCheck$ >= "15230" {{Cl|AND (boolean)|AND}} ZipCheck$ <= "15239") {{Cl|THEN}}
Info$ = Clist$
{{Cl|PRINT}} {{Cl|LEFT$}}(Info$, 30) 'read name string
{{Cl|PRINT}} {{Cl|MID$}}(Info$, 31, 30) 'read address string
{{Cl|PRINT}} {{Cl|RIGHT$}}(Info$, 17) 'read city, state and zip code
{{Cl|PRINT}}
{{Cl|END IF}}
{{Cl|GET}} #1 'simply GET reads each FIELD record after first
{{Cl|LOOP}}
{{Cl|CLOSE}} #1
{{Cl|END}} '' ''
{{CodeEnd}}
{{PageSeeAlso}}
* [[OPEN]], [[TYPE]]
* [[GET]], [[PUT]]
* [[LSET]], [[RSET]]
{{PageNavigation}}
<