Disk File
Input/Output
5-4
Random File
I/O
Random
I/O
requires a bit more care and coding than sequential
I/O,
but
is
more
flexible because you can move back and forth within a disk file. These are the key
differences:
• To get
data
from random disk files to BASIC-80 variables and vice-versa, you
must understand how
BASIC-80 uses
110
buffer space.
• Random
110
operations (GET and PUT) always read or write all
128
bytes
of
a
floppy disk sector. You must specify how this 128-byte string
is
divided into
fields and assigned to string variables.
• Because all data in random files
is
treated as string data, you must convert
strings
that
represent numbers into numeric values if you want to
do
any
calculations with
them.· Likewise, if you want to write a numeric value
to
a ran-
dom file, you must first convert it to a string. Special functions are provided
to
do this.
• You must use special assignment statements to
put
a string variable into an
110
buffer. This
is
due to the fact that the fields you define in an
I/O
buffer are
of
fixed-length; the special assignment statements accommodate variables
that
are
longer
or
shorter than the specified field.
• Unless you simply want to read
or
write records
in
sequence, you .must specify
which record you want to read or write.
1/0
Buffers
BASIC-80 reserves space
for
six
I/O
buffers, each
128
bytes long. One buffer
is
assigned to each open file (when an OPEN statement
is
executed). When you read a
record from a random file using GET, the 128-byte string
is
not assigned directly to
a variable.
It
is placed in the 110 buffer assigned to that file, and it
is
up to you to
define what portions
of
the string are to be assigned to what variable
or
variables.
To emphasize: the usual variable and line delimiters
(",
CR) have no special mean-
ing. All
128
bytes from the specified sector are placed
in
the 110 buffer.
If
fewer
than
128
bytes were written to the sector, the remaining character positions in the
buffer are set
to
ASCII blanks (hexadecimal
20)
.
Defining a Random
1/0
Field-FIELD
When a sector has been read into the 110 buffer, it exists as a 128-byte string. You
must define how the string
is
to be assigned to a variable or variables. The FIELD
statement specifies to
BASIC-80 what character positions in the buffer correspond
to string variables (initially they
must be string variables, because the sector
is
treated as a 128-byte string).
The FIELD statement tells
BASIC-80, for a given file, what character positions,
starting with the first, are to be associated with a variable. For example, assume you
have opened a random file, assigned it the file number 3 (the
OPEN
command
works just like in sequential
110), and read the first sector from the file. You know
that the first
20 characters of each sector contain a name. To assign these
20
bytes to
the string variable N$, enter the following FIELD statement:
FIELD
#3,
20
AS
N$
BASIC-SO