QB64.com

QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.

The FIELD statement creates a STRING type definition for a RANDOM-access file buffer.

Syntax

FIELD [#]fileNumber&, fieldWidth1% AS variable1$[, fieldWidthN% AS variableN$]

Description

Example(s)

Comparing a TYPE definition with a FIELD STRING definition. Demo using a TYPE definition to create a file:


TYPE ClientType
   CName AS STRING * 30     '30 bytes
   Address AS STRING * 30   '30 bytes 
   City   AS STRING * 15    '15 bytes
   State  AS STRING * 2     ' 2 bytes
   Zip    AS STRING * 5     ' 5 bytes
END TYPE      ' total size = 82 bytes
DIM Client AS ClientType
RecordLEN = LEN(Client)       'find the size of each TYPE record

OPEN "ADDRESS.DAT" FOR RANDOM AS #1 LEN = RecordLEN
RESTORE ClientData         'restore to start of DATA
record = 0
DO
   READ CName$, Address$, City$, State$, Zip$       'read DATA
   IF CName$ = "END" THEN EXIT DO
   record = record + 1               'increment record number
   Client.CName = CName$          
   Client.Address = Address$
   Client.City = City$
   Client.State = State$
   Client.Zip = Zip$
   PUT #1, record, Client     'PUT by record number
LOOP
CLOSE #1 
END

ClientData:
   DATA "Bob White","104 Birdland Rd.","Bellview","PA","15236"
   DATA "Ward Cleaver","123 W. Beaver St.","Beaver","PA","15255"
   DATA "Elmer Fudd","45 Wabbit St.","Bethel Park","PA","15022"
   DATA "Wyley Coyote","33 Roadrunner Ave.","Clairton","PA","15122"
   DATA "Jim Morrison","19 Doorway Dr.","Belleview","PA","15236"
   DATA "END",0,0,0,0 

Demo using the FIELD statement to read the file:


CONST NM = 30, AD = 30, CT = 15, ST = 2, ZC = 5  ' Define field and record lengths with constants.
CONST RLEN = NM + AD + CY + ST + ZC
'
OPEN "ADDRESS.DAT" FOR RANDOM AS #1 LEN = RLEN
FIELD #1, NM AS CName$, AD AS Address$, CY AS City$, ST AS State$, ZC AS Zip$
FIELD #1, RLEN AS Clist$         'define entire record

GET #1, 1                  'GET does not need a variable to read FIELD records!
                                  'Read file for zip codes from 15230 to 15239 .
DO WHILE NOT EOF(1)
   ZipCheck$ = Zip$                            'read zip codes
   IF (ZipCheck$ >= "15230" AND ZipCheck$ <= "15239") THEN
      Info$ = Clist$
      PRINT LEFT$(Info$, 30)     'read name string
      PRINT MID$(Info$, 31, 30)  'read address string
      PRINT RIGHT$(Info$, 17)    'read city, state and zip code
      PRINT
   END IF
   GET #1                               'simply GET reads each FIELD record after first
LOOP
CLOSE #1
END 

See Also