Bitácora del desarrollo de mi clase de C++, en el que publicaré el material de la clase y recibiré comentarios y sugerencias de mis alumnos.

lunes, 7 de mayo de 2007

10.1 Archivos de Acceso Secuencial

Cómo crear un archivo de acceso secuencial
Para abrir un archivo en un programa escrito en C, es necesario utilizar la función fopen(), la cual recibe dos parámetros, el nombre del archivo y el modo de apertura del archivo. Los modos de apertura se describen a continuación.

MODO DESCRIPCIÓN
r Abrir un archivo para lectura.
w Crear un archivo para escritura. Si el archivo ya existe se pierde el contenido actual.
a Agregar, abrir o crear un archivo para escribir al final del mismo.
r+ Abrir un archivo para actualizar (leer y escribir).
w+ Crear un archivo para actualizar, si el archivo ya existe se pierde el contenido actual.
a+ Agregar, abrir o crear un archivo para actualizar, la escritura se efectuará al final del archivo.

A continuación se presenta un ejemplo de creación de un archivo secuencial:

/* Creacion de un archivo de acceso secuencial */
#include (stdio.h)
#include (conio.h)
main( )
{
int cuenta;
char nombre[30];
float saldo;
FILE *cuentaPtr;
if ((cuentaPtr = fopen("cliente.dat","w")) == NULL)
printf("No se puede abrir el archivo\n");
else
{
printf("Introduzca cuenta, nombre y saldo.\n");
printf("Introduzca EOF para terminar.\n");
printf("? ");
scanf("%d%s%f", &cuenta, nombre, &saldo);
while (!feof(stdin))
{
fprintf(cuentaPtr, "%d %s %.2f\n", cuenta, nombre,saldo);
printf("? ");
scanf("%d%s%f", &cuenta, nombre, &saldo);
}
fclose(cuentaPtr);
}
getch ( );
return 0;
}

El enunciado
FILE *cuentaPtr;
establece que cuentaPtr es una apuntador a una estructura de tipo FILE. Cada archivo abierto debe tener un apuntador declarado por separado del tipo FILE, que es utilizado para referirse al archivo.

La línea
if ((cuentaPtr = fopen("cliente.dat","w")) == NULL)
nombra el archivo cliente.dat, para ser utilizado por el programa y establece una comunicación con el archivo a través del apuntador, en este caso el archivo se abre para escritura. La estructura if se utiliza para determinar si el apuntador al archivo cuentaPtr es NULL, es decir, que el archivo no está abierto. Si es NULL, se imprime un mensaje de error y el programa termina, de lo contrario la entrada es procesada y escrita al archivo.

La línea
while (!feof(stdin))
utiliza la función feof para determinar si el indicador de fin de archivo está definido para el archivo a que se refiere stdin. El indicador de fin de archivo le informa al programa que ya no hay más datos a procesar., el indicador de fin de archivo está definido para la entrada estándar cuando el usuario introduce la combinación de teclas de fin de archivo (Control-Z). La estructura while continuará ejecutándose hasta que se defina el indicador de fin de archivo.

El enunciado
fprintf(cuentaPtr, "%d %s %.2f\n", cuenta, nombre,saldo);
escribe datos al archivo cliente.dat, que es al que apunta el apuntador cuentaPtr. Los datos pueden ser recuperados más tarde mediante un programa diseñado para leer el archivo.

Al terminar de ejecutar al programa compruebe la creación del archivo cliente.dat. Desde el explorador de Windows o saliendo al símbolo de sistema mediante la orden File- Dos shell, verifique la existencia y el contenido del archivo cliente.dat. Si se desea que el archivo sea creado en la unidad A:, el parámetro de la función fopen debe ser “a:cliente.dat”, de otra manera se creará en el directorio actual (generalmente C:\TC\BIN).

La función fclose() cierra siempre el archivo al cual apunta el apuntador enviado como parámetro, en este caso fclose(cuentaPtr) cierra el archivo cliente.dat.

Cómo leer datos de un archivo de acceso secuencial
Una vez que se ha creado el arcihvo, la lectura puede resultar más cómoda, pues las diferencias con la creación del archivo son únicamente el modo de apertura del archivo “r”, y la manera en que se leen los datos mediante la función fscanf.

La función fscanf, se le indica de qué archivo se leerán los datos, mandándole como parámetro el apuntador a FILE, en este caso cuentaPtr, la cadena de control para indicarle qué tipo de datos leerá del archivo, y la dirección de las variables a las que asignará los valores leídos (tal como a scanf). Obviamente que si el archivo tiene una ubicación diferente a la actual, el parámetro de nombre de archivo en la función debe tener la ruta completa, por ejemplo
fopen(“A:CLIENTE.DAT, “r”);

A continuación se presenta el ejemplo de lectura del archivo creado en el apartado anterior.

/* Leyendo datos de un archivo de acceso secuencial */
#include (stdio.h)
#include (conio.h)
main( )
{
int cuenta;
char nombre[30];
float saldo;
FILE *cuentaPtr;

if ((cuentaPtr = fopen("cliente.dat","r")) == NULL)
printf("No se puede abrir el archivo\n");
else
{
printf("%-10s%-13s%s\n","Cuenta","Nombre","Saldo");
fscanf(cuentaPtr,"%d%s%f",&cuenta, nombre, &saldo);

while (!feof(cuentaPtr))
{
printf("%-10d%-13s%7.2f\n", cuenta, nombre, saldo);
fscanf(cuentaPtr,"%d%s%f",&cuenta, nombre, &saldo);
}
fclose(cuentaPtr);
}
getch( );
return 0;
}

1 comentarios:

Blogger ivan ha dicho...

gracias por la explicacion

10 de febrero de 2010, 4:51

 

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio