Acabamos de hacer alusión al hecho de que, a menudo, es preferible leer un fichero secuencial que contenga datos del tipo de cadena, en forma de un carácter cada vez. Esto es así para evitar los inconvenientes de la instrucción INPUT#, que exige una correspondencia rígida entre sus variables y los campos del registro separados por las comas.
En este caso ya no existen campos y registros del fichero, sino que la destribución lógica debe ser reconstruida por el programa de lectura.
Así, en el ejemplo siguiente, en la cadean R$ "acumulamos" un registro leyendo un carácter cada vez. Al comienzo de cada campo, la cadena R$ se pondrá a cero (línea 150); a través de la instrucción INPUT$ se lee y asigna a la variable A$ un carácter desde el canal número 1 (#1) abierto con anterioridad. El primer número 1, entre los paréntesis de la instrucción, indica precisamente que se lee un solo carácter; en realidad, INPUT$ permitiría que se leyese más de uno. Inmediatamente después se efectúan dos comprobaciones: si el carácter leído es una coma (ASCII 44), el programa pasará al control del campo, y si el carácter es Re-turn (ASCII 13), se terminará el registro. En todos los demás casos el carácter se añade a la cadena R$ (línea 190). Después del control de campo o de registro, el programa volverá a la línea 150.
150 R*=" "
160 A*=INPUT*<1,#1>
165 REI"!
170 IF A*=CHR*<44> THEN GOTO 200 180 IF A*=CHR*(13) THEN GOTO 300 190 R*=R*+A*: GOTO 160 195 REM
200 ... R* Contiene un campo
300 ... Final de registro,R* contiene el ultimo campo
Si se emplea la instrucción GET#, la línea 160 debe cambiarse como sigue:
160 GET#1,A*
Si el fichero contiene datos numéricos, grabados con variables numéricas, se debe utilizar INPUT# por cuanto que GET# e INPUT$, al leer un carácter cada vez, harían muy difícil la reconstrucción de los números expresados en forma exponencial (por ejemplo: 3.456 E-8).
Se podría pensar que la lectura de un fichero con GET# (un carácter cada vez) es mucho más lenta en relación con la efectuada con INPUT# (un registro completo), pero, en realidad, el tiempo empleado es prácticamente igual. GET# ofrece, no obstante, la ventaja de que cualquier cosa que se escriba en el fichero puede ser leída como si se programase en lenguaje máquina. Exige, pues, un poco más de dominio y de atención.
No hay comentarios:
Publicar un comentario