More About Input (Advanced) - Commodore 1541 User Manual

Hide thumbs Also See for 1541:
Table of Contents

Advertisement

but many programs cheat on safety a bit and use
800 INPUT#5,NAME$ ,STREET$ ,CITY$
810 GOSUB 59990:REM CHECK FOR DISK ERRORS
This is done primarily when top speed in the program is essential, and there is little
or n
risk of reading improper data from the file
.
0
MORE ABOUT INPUT# (FOR ADVANCED USERS)
Troublesome Characters
After you begin using data files regularly
,
you may encounter two Basic
error
messages
more or
less
frequently
.
They are
"
STRING TOO LONG ERROR
"
and
"FILE
DATA ERROR
".
Both are likely to halt your program at an Input#
statement, but may
also have been caused by errors in a Print# statement when the file was written
.
"STRING TOO LONG
"
ERRORS
A Basic string may be up to 255 characters long
,
although the longest string you
can
enter via a single Input statement is just under 2 lines of text (4 on the VIC 20)
. This lower
limitation is due to the 88 character size of the Input buffer in Commodore's
serial bus
computers
.
The same limit
applies
to Input# statements
.
If a single data element (stri
ng or
number) being read from a disk file into an Input# statement contains more
than 87
characters, Basic will halt with a
"
STRING TOO LONG ERROR
".
To prevent
this
error, be sure to limit each string to under 88 characters
,
and separate all file data
items
with carriage returns (See the next section for a cure once the error has
occurred.)
"FILE DATA
"
ERRORS
The other error message
"
FILE DATA ERROR" is caused by attempting to
read a
non-numeric character into a numeric variable. To a
computer,
a number is the
characters
0 through 9, the
"
+
"
ana
"
- " signs, the decimal point(.), the SPACE
character,
and
the letter
"
E" used in
scientific
notation. If any other character appears in an
Input# to
a
numeric
variable, "
FILE DATA ERROR" will be displayed and the program will
hall.
The usual causes of this error are a mismatch between the order in which
variables
are
written to and read from a file, a missing carriage return within a Print#
statement that
writes more than one data item
,
or a data item that includes either a comma or a
colon
without a preceding quotation mark
.
Once a file data error has occurred
,
you
should
correct it by reading the data item into a string variable, and then converting it
back
to
a
number with the Basic Val() statement after removing non-numeric characters
with the
string functions described in your computer users manual.
COMMAS (.) AND COLONS (:)
As suggested before, commas and colons can cause trouble in a file,
because theY
delimit (end) the data element in which they appear and cause any remaining
characters in
the data element to be read into the next Input#
variable.
(They have the same effect
in
an
Input
statement,
causing the common
"
EXTRA IGNORED" error message.)
However.
sometimes we really need a comma or colon within a data element, such as a name
written
as
" Last,
First"
.
The cure is to precede such data elements with a quotation mark
. After
a
50
quotation
mark,
in either an Input or Input#
statement,
all other
characters
except a
carriage return or another quotation mark are accepted as part of the current data element.
eXAMPLES
:
To
force a quotation mark into a data element going to a file
,
append a CHR$(34) to
the
start
of tbe..fiata element. For
example:
PRINT#2,CHR$(34) + "
STRASMA, JIM"
or
PRINT#2,CHR$(34);"STRASMA
,
JIM"
If
you
do this often, some space and time may be saved by previously defining a variable
as
equal
to CHR$(34) as we did earlier with CHR$(13):
20 QT$= CHR$(34)
400 PRINT#5,QT$ +NAME$
In each
case, the added quotation mark will be stripped out of the data by the Input or
Input#
statement, but the comma or colon will remain safely part of the
data.
NUMERIC
DATA STORAGE ON DISKETTE
Inside
the computer, the space occupied by a numeric variable depends only on its
type. Simple
numeric variables use 7 bytes (character locations) of memory
.
Real array
variables use 5 byte§ per array element, and integer array elements use 2 bytes each
.
In
contrast,
when a numeric variable or any type is written to a
file,
the space it occupies
depends entirely on its length, not its type
.
Numeric
data is written to a file in the form of a string, as if the
Str$()
function had
been
performed on it
.
The first character will be a blank space if the number is positive
,
and
a minus sign (
-
) if the number is negative. Then comes the
number,
digit by digit.
The last
character is a cursor right
character.
This
format allows the disk data to be read back into a string or numeric variable
later. It
is,
however,
somewhat wasteful of disk space, and it can be difficult to
anticipate
the
space required by numbers of unknown length
.
For this reason, some programs
convert all numeric variables into strings before writing them to diskette, and use string
functions
to remove any unneeded characters in advance
.
Doing so still
allows
those data
elements to be read back into a numeric variable by Input#
later,
although file data
errors
~y
be avoided by reading all data in
as
strings
,
and converting to numbers after the
tnforrnation is inside the
computer.
For example, "N$
=
MID$(STR$(N),2)
"
will convert a positive number N into a
5
1ring N$ without the usual leading space for its numeric sign
.
Then instead of writing
i>RINT#5
,N
,
you would use PRINT#5 ,N$
.
51

Advertisement

Table of Contents
loading

Table of Contents