domingo, 28 de junio de 2009

FIELD, LSET, RSET y PUT

La instrucción FIELD determina una zona de memoria para el buffer, indispensable en la gestión de un fichero. Con FIELD se define exactamente la estructura del registro, indicando cuántos caracteres tiene de longitud y cuáles son sus campos. que debe utilizarse tanto en escritura como en lectura,

Estos nombres de variable no representan variables ordinarias de las que estamos acostumbrados a emplear en BASIC, sino variables muy especiales a las que se le atribuye un valor mediante las instrucciones LSET o RSET; en la práctica son, más que variables, punteros dirigidos a los campos del regis-

FIELD #<canal>, <longitudl> AS <variablel> [,<long2> AS <var.2>...]

La primera, LSET ("left set")

llena los campos del buffer a partir de la izquierda, como estamos acostumbrados para formar en columnas las cadenas, y la segunda, RSET ("right set"), realiza dicha operación desde la derecha, como se suele hacer con los números.

LSET <variable campo> = <variable> RSET <variable campo> = <variable>

Quizá en este punto tenga las ideas más confusas que nunca. En realidad, el empleo de la instrucción FIELD y de las instrucciones LSET y RSET es muy sencillo. Un ejemplo servirá para aclararlo definitivamente (RSET se utiliza en más raras ocasiones, pero del mismo modo).

Supongamos que quiere escribir un fichero directo de nombres propios, cuyos registros están divididos en dos campos: nombre y apellido. Ante todo, debemos establecer cuál será la longitud de cada registro; si prevemos 30 caracteres para los nombres y 20 para los apellidos, los registros tendrán una longitud de 50 caracteres. Repetimos que esta delimitación de la longitud de los registros es característica de los ficheros directos, mientras que los ficheros secuenciales son libres de tener registros largos o cortos, indistintamente.

Veamos las dos primeras instrucciones:

100 OPEN "R",#8,"NOMBRES PROPIOS",50 ( 110 FIELD #8,30 AS N*,20 AS C*

OPEN abre un fichero relativo o directo ("R") con el número de canal 8, elegido libremente entre 1 y 255. El nombre del fichero es NOMBRES PROPIOS y 50 es la longitud total establecida para todos los registros. La instrucción OPEN para los ficheros secuenciales habría exigido en el lugar de R, una O para le escritura y una I para la lectura del fichero (la lectura y la escritura de los ficheros directos pueden ser simultáneas).

La instrucción FIELD, de la línea 110, indica que se refiere al fichero asociado al canal 8. Se podrían abrir simultáneamente varios ficheros, con tal de que tengan números de canal y nombres diferentes. Según definimos en FIELD, el registro está dividido en dos campos, llamados N$ y A$, el primero con una longitud de 30 caracteres y el segundo con 20 caracteres.

En este punto, a título de ejemplo, supongamos que se piden a la entrada 10 nombres propios y que se quieren escribir en el fichero. Tendremos que definir instrucciones de entrada desde el teclado, comprobar que cada nombre no tenga más de 30 caracteres de longitud y cada apellido no más de 20 caracteres, y luego, a través de las instrucciones LSET, "asignaré" a cada campo de los registros como veremos en el siguiente apartado. Una vez concluidas todas las operaciones, se cerrará el fichero. Veamos el programa completo:

100 OPEN "R",#S, "NOMBRES PRnp ms", 50 105 REM _

110 FIELD #8,30 AS N».20 AS Aí 120 REM

130 FOR K=l TO 10:REM 10 NOMBRES PROPIOS

140 IMPUT "NOMBRE ":DN*

150 IF LEN<DN*:O30 THEN GOTO 1*0

160 1NPUT "APELLIDO"jDA*

170 IF LEN<DA»>>20 THEN SOTO 160

180 L3ET N*=DN*:REM CAMPO DEL NOMBRE

190 LSET A*«DA»:REM CAMPO DEL APELLIDO

195 REM

200 FUT #8.K:REM ESCRITURA DEL REGISTRO K-ES11-10

210 NEXT K

220 REM

2.50 CLOSE #8

No hay comentarios:

Publicar un comentario