domingo, 28 de junio de 2009

PUT# y GET#

Son las dos instrucciones que permiten escribir y leer un fichero directo. Ambas instrucciones, además de indicar el fichero al que se refieren (en el ejemplo, el asociado al canal núm. 8), tienen como único parámetro el número del registro que debe escribirse (PUT#) o leerse (GET#). Su sintaxis es:

PUT# <canal>, <número registro> GET# <canal>, <número registro>

En este caso, le recordamos que la palabra reservada GET no tiene nada que ver con la GET que usan algunos ordenadores con los ficheros secuenciales. Esta GET# puede leerse así: extraer el registro n-ésimo del fichero abierto con el número de canal indicado y copiarlo en el buffer definido por la instrucción FIELD correspondiente. PUT# transfiere, por el contrario, el contenido del buffer al registro n-ésimo del fichero.

GET# es algo más sencilla de utilizar que PUT# por cuanto que no requiere las instrucciones LSET o RSET. Después de que se haya leído un registro con GET#, las variables citadas en la instrucción FIELD pueden utilizarse inmediatamente como variables normales. Veámoslo escribiendo el programa de lectura del fichero NOMBRES PROPIOS.

100 OPEN "R".#2,"NOMBRES PROPIOS",50 105 REM

110 FIELD #2,30 AS NS,20 AS A* 120 REM

130 PRINT "QUE NOMBRE QUIERE LEER:1-10 (O FINAD" 135 REM

140 INPUT NR:REM NUMERO DE REGISTRO 145 REM

150 IF NR=0 THE GOTO 200

160 IF NR<1 üR NRMO THEN SOTO 130

165 REM

170 GET #2,NR:REM LECTURA DEL REGISTRO 175 REM

180 PRINT N*,A*:REM IMPRESION DEL REGISTRO 190 GOTO 130 195 REM

200 CLOSE #2:END

La instrucción PRINT en la línea 180 hace uso directamente de las dos variables N$ y A$ de la instrucción FIELD, sin pasar a través de LSET o RSET. ^

Si queremos grabar números en un fichero directo, no podemos hacerlo directamente mediante variables numéricas, sino de forma indirecta a través de variables de cadena. Para convertir datos numéricos en una cadena se puede recurrir a la función STR$, y para lo contrario, a VAL. pero muchas versiones del BASIC, como la de Microsoft, proporcionan un conjunto para grabarlos en los ficheros directos. La primera se refiere a los números enteros: la segunda, a los números de simple precisión (números con seis cifras significativas), y la tercera, a los números de doble precisión (con dieciséis cifras significativas).

Por el contrario, que tratan a los números enteros, a los de simple precisión y a los de doble precisión, respectivamente.

Una vez más, con un pequeño ejemplo consideramos que se aclararán los conceptos:

80 REM ***************************** 90 REM * APERTURA DEL REGISTRO * 95 REM ***************************** 100 OPEN "R",#1,"NUMERICO",8

105 REM *************************** 110 REM * DEFINICION DEL REGISTRO * 115 REM *************************** 120 FIELD #1,4 AS X*,4 AS Y* 125 REM ******************* 130 REM * ESCRIBO VALORES * 135 REM ******************* 140 X1=32.345:Y 1=23.00333 145 REM

150 RSET X*-MKS»<X1> 160 RSET Y*=MKS*(Y1)

165 REM ****************************** 170 REM * INTRODUCCION EN EL FICHERO * 175 REM ****************************** 180 RUT #1.1

185 REM **************************

190 REM * LECTURA DE LOS VALORES * 200 REM ************************** 210 GET #1,1

220 REM *********************************

235 REM * TRANSFORMACION DE LOS VALORES * 240 REM **************************:******* 250 R1=CVS!X*) 260 R2»CVS<Y*> 270 PRINT R1.R2

280 REM ********************** 285 REM * CIERRE DEL FICHERO * 290 REM ********************** 300 CLOSE #1

El fichero tiene un solo registro con dos campos, en los que se escriben dos números reales de precisión simple, que ocupan 4 bytes cada uno, y luego se leen.

No hay comentarios:

Publicar un comentario