Guardar y abrir

Ficheros


El manejo de ficheros también es algo que varía mucho de una versión a otra, así que veremos sólo un ejemplo sencillo que nos ayude a entender los fundamentos.

Emplearemos QBasic, que permite más posibilidades que otros BASIC más antiguos.

Los pasos básicos para acceder a un fichero serán;

Hay básicamente dos formas de acceder a un fichero: de modo secuencial (leer un dato tras otro, en "secuencia") o de modo directo (o aleatorio, pudiendo acceder directamente a cualquier posición del fichero).

19.2. Acceso secuencial a un fichero

Primero veremos la forma de acceder a un fichero secuencial: abriremos un fichero para escritura y guardaremos texto en él; después lo cerraremos y lo volveremos a abrir, esta vez para lectura, y mostraremos en pantalla todo su contenido

REM Primero vamos a crear el fichero

OPEN "TEXTO.TXT" FOR OUTPUT AS #1 

WRITE #1, "Esto es la primera linea del fichero" 

WRITE #1, "Segunda línea" 

WRITE #1, "Tercera y última línea" 

CLOSE #1


REM Ahora vamos a leer del fichero

PRINT "Contenido del fichero:" 

OPEN "TEXTO.TXT" FOR INPUT AS #1 

DO WHILE NOT EOF(1) 

LINE INPUT #1, linea$ 

PRINT linea$ 

LOOP 

CLOSE #1 

PRINT "Final del fichero"

(Fuente "1901.bas". Probado en QBasic 1.1)

Casi es autoexplicativo:

Cuando abrimos para escribir (FOR OUTPUT), si el fichero ya existiera, se borraría. Si queremos añadir en un fichero de texto que ya existe, en vez de crear uno nuevo, deberemos usar FOR APPEND, así:

OPEN "FICHERO2.TXT" FOR APPEND AS #3

Ejercicio propuesto 19.2.1: Crea un programa que pida frases al usuario y las guarde en un fichero de texto, cada frase en una línea.

Ejercicio propuesto 19.2.2: Crea un programa que pida al usuario el nombre de un fichero de texto y muestre todo su contenido en pantalla. Tras cada 24 líneas, deberá hacer una pausa hasta que el usuario pulse Intro.

Ejercicio propuesto 19.2.3: Crea un programa que pida al usuario el nombre de un fichero de texto y muestre en pantalla la cantidad de líneas de texto que contiene.

Ejercicio propuesto 19.2.4: Crea un programa que pida al usuario el nombre de un fichero de texto, cuente cuántas líneas contiene, cree un array y guarde todas ellas, para luego mostrarlas en pantalla en orden contrario (de la última a la primera).

Ejercicio propuesto 19.2.5: Crea un programa que pida al usuario el nombre de un fichero de texto, guarde todas sus líneas en un array y las vuelque a un nuevo fichero llamado "salida.txt", en orden contrario (de la última a la primera).

19.3. Acceso aleatorio a un fichero

Si queremos abrir el fichero para acceder directamente a cualquier " registro", tendremos que indicar que será de acceso directo.

Vamos a verlo con un ejemplo, en el que casi todo es ya conocido, salvo que cambia un poco la forma de abrir el fichero (se indica que es acceso aleatorio con FOR RANDOM, y se indica también la longitud de cada ficha), y que los datos se leen con GET y se escriben con PUT , indicando en cada caso el número de registro a leer o escribir.

REM Definimos el tipo de datos que vamos a almacenar 

TYPE TipoAlumnos 

  nombre AS STRING * 30 

  edad AS INTEGER 

  nota AS SINGLE 

END TYPE


REM Reservamos espacio en memoria para 20 alumnos 

DIM Alumno(1 TO 20) AS TipoAlumnos


REM Y también para una ficha temporal 

DIM AlumnoTemp AS TipoAlumnos


REM Abro el fichero y guardo 10 datos en él 

OPEN "ALUMNOS.DAT" FOR RANDOM AS #1 LEN = LEN(TipoAlumnos) 

FOR i = 1 TO 10 

  PUT #1, i, Alumno(i) 

NEXT i 

CLOSE #1


REM Ahora abro y leo la 5ª ficha 

OPEN "ALUMNOS.DAT" FOR RANDOM AS #1 LEN = LEN(TipoAlumnos) 

GET #1, 5, AlumnoTemp 

PRINT "Nombre del alumno:", AlumnoTemp.nombre 

PRINT "Nota del alumno:", AlumnoTemp.nota 

CLOSE #1