in BASIC ROM:
|List of all BASIC keywords|
Type: Numerical Function General Programming-Syntax: ASC(<String>)
Evaluation of an empty string ("") results in the BASIC-error ?ILLEGAL QUANTITY ERROR. Since BASIC 7.0 this has been fixed and ASC("") returns the value 0. See Examples section for common usage.
If the operand doesn't evaluate to a string the BASIC error ?TYPE MISMATCH ERROR appears. If no operand is provided the error message ?SYNTAX ERROR shows up.
PRINT ASC("A") 65 PRINT ASC("ABC") 65 PRINT ASC("") ?ILLEGAL QUANTITY ERROR PRINT ASC ?SYNTAX ERROR PRINT ASC(1) ?TYPE MISMATCH ERROR
PRINT ASC("") 0
No error condition anymore!
In a program the efficient way to use the ASC function is (in regard to cope with the special case "empty string") is
10 Z$=CHR$(0) ... 1000 A=ASC(A$+Z$)
The variable definition speeds the thing up (avoiding the evaluation of the CHR$ function and its parameter). The definition of Z$ should be placed at the very beginning to ensure a fast access to this variable.
Other variants like
and so on are either impractical or take to much code space. However they are always slower.
Read a sequential file bytewise
10 Z$=CHR$(0) 100 OPEN 2,8,3,"FILENAME,S,R" 110 FOR S=0 TO 1 120 GET#2,A$ 130 A=ASC(A$+Z$) 140 S=ABS(ST) 150 PRINT A; 160 NEXT S 170 CLOSE 2 ...
The command GET# needs special treatment. If a CHR$(0) is read the result is an empty string, which can be fixed as follows:
- if A$ is empty, concatenate string Z$ (contains CHR$(0)) which results in the final string containing CHR$(0).
- if A$ is not empty the concatenation doesn't change anything because ASC() takes only the first character.
The recommendation is to use a variable for CHR$(0), see above Common Usage.
The FOR-NEXT loop has its advantage to speed things up and terminates as soon the status (ST system-variable) return a value not equal 0 (this happens on end-of-file or error condition) which is achieved by manipulating the FOR-NEXT variable S.