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.

RANDOM is used in an OPEN statement to read(GET) from or write(PUT) to a file.

Syntax

OPEN Filename$ FOR RANDOM AS #1 [LEN = recordlength%]

Example(s)

Function that finds a RANDOM file’s record number for a string value such as a phone number.


TYPE customer
  age AS INTEGER
  phone AS STRING * 10
END TYPE

DIM SHARED cust AS customer, recLEN
recLEN = LEN(cust)            'get the length of the record type
PRINT "RecLEN:"; recLEN

OPEN "randfile.rec" FOR RANDOM AS #1 LEN = recLEN
FOR i = 1 TO 4
  READ cust.age, cust.phone
  PUT #1, , cust
NEXT
CLOSE #1

RP = RecordPos("randfile.rec", "2223456789")  'returns 0 if record not found!

PRINT RP  

IF RP THEN
  OPEN "randfile.rec" FOR RANDOM AS #2 LEN = recLEN
  GET #2, RP, cust
  CLOSE #2
PRINT cust.age, cust.phone
END IF

END

DATA 59,2223456789,62,4122776477,32,3335551212,49,1234567890

FUNCTION RecordPos (file$, search$)
f = FREEFILE
OPEN file$ FOR INPUT AS #f
FL = LOF(f)
dat$ = INPUT$(FL, f)
CLOSE f
recpos = INSTR(dat$, search$)
IF recpos THEN RecordPos = recpos \ recLEN + 1 ELSE RecordPos = 0
END FUNCTION 

Note: Random files can store records holding various variable types using a TYPE definition or a FIELD statement.

When not using a TYPE or fixed length strings, QB4.5 allows RANDOM files to hold variable length strings up to 2 bytes less than the LEN = record length statement:


_CONTROLCHR OFF
OPEN "myfile.txt" FOR OUTPUT AS #1: CLOSE #1: ' clears former file of all entries.
OPEN "myfile.txt" FOR RANDOM AS #1 LEN = 13 'strings can be up to 11 bytes with 2 byte padder

a$ = CHR$(1) + CHR$(0) + "ABCDEFGHI"
b$ = "ABCDEFGHI"
c$ = "1234"

PUT #1, 1, a$
PUT #1, 2, b$
PUT #1, 3, c$

FOR i = 1 TO 3
  GET #1, i, a$
  PRINT a$, LEN(a$)
NEXT

CLOSE 


☺ ABCDEFGHI       11
ABCDEFGHI         9
1234              4

Note: The 2 byte file padders before each string PUT will show the length of a string for GET as ASCII characters. Padders will always be 2 bytes and strings up to the last one will be 13 bytes each no matter the length up to 11, so the file size can be determined as (2 + 11) + (2 + 9 + 2) + (2 + 4) or 13 + 13 + 2 + 4 = 32 bytes.

See Also