CONTENIDO DE LA LECCIÓN 8

CONTENIDO DE LA LECCIÓN 8 CONTENIDO DE LA LECCIÓN 8

azul2.bnct.ipn.mx
from azul2.bnct.ipn.mx More from this publisher
06.05.2013 Views

MIGUEL Á. TOLEDO MARTÍNEZ Los archivos se abren para entrada mediante la creación de un objeto de la clase ifstream. Se pasan dos argumentos al objeto –el nombre del archivo y el modo de apertura del archivo. La declaración: ifstream archivoEntrada(“clientes.dat”, ios::in); crea un objeto ifstream llamado archivoEntrada y lo asocia con el archivo clientes.dat que se abrirá para entrada. Los argumentos que están entre paréntesis se pasan a la función constructora de ifstream, la cual abre el archivo y establece una línea de comunicación con el archivo. De manera predeterminada los objetos de la clase ifstream se abren para entrada, por lo que se podría haber utilizado la instrucción: ifstream archivoEntrada(“clientes.dat”); para abrir clientes.dat para entrada. Al igual que como sucede con un objeto ofstream, se puede crear un objeto ifstream sin abrir un archivo específico y posteriormente se le puede asociar un archivo. El programa utiliza la condición !archivoEntrada para determinar si el archivo se abrió satisfactoriamente antes de intentar la recuperación de datos del archivo. La declaración while( archivoEntrada >> cuenta >> nombre >> balance ) lee un conjunto de datos (es decir, un registro) desde el archivo. Cada vez que se ejecuta la línea, se lee otro registro desde el archivo hacia las variables contador, nombre y balance. Los registros se despliegan utilizando la función lineaSalida(), la cual usa manipuladores de flujo con parámetros para formatear los datos para su despliegue. Cuando se llega al fin de archivo, la secuencia de entrada de la estructura while devuelve 0 (normalmente se devuelve el flujo archivoEntrada), el archivo se cierra por medio de la función destructor ifstream y el programa termina. Para recuperar datos secuencialmente desde un archivo, los programas comienzan, por lo general, leyendo desde el inicio del archivo y leen todos los datos en forma consecutiva hasta que se encuentra el dato deseado. Tal vez sea necesario procesar el archivo secuencialmente varias veces (desde su inicio) durante la ejecución del programa. Las clases istream y ostream proporcionan funciones miembro para reubicar el apuntador de posición de archivo (el número de byte del siguiente byte del archivo a leer o escribir). Estas funciones miembro son seekg (buscar y obtener), para la clase istream y seekp (buscar y colocar), para la clase ostream. Cada objeto istream tiene un apuntador obtener que indica el número de bytes del archivo en donde sucederá la siguiente entrada, y cada objeto ostream tiene un apuntador colocar que indica el número de byte del archivo en el cual se colocará la siguiente salida. La instrucción: archivoEntrada.seekg(0); ubica el apuntador de posición de archivo en el inicio del archivo (localidad 0) que está asociado a archivoEntrada. El argumento seekg es normalmente un entero long. Es posible especificar un segundo argumento para indicar la dirección de búsqueda, la cual puede ser ios::beg (lo predeterminado) para ubicación con relación al inicio de un flujo, ios::cur para ubicación relación a la posición actual en un flujo, e ios::end para ubicación con relación al final del flujo. El apuntador de posición de archivo es un valor entero que especifica la localidad en el archivo como un número de bytes a partir de la localidad inicial del archivo (a esto también se le conoce FUNDAMENTOS – LECCIÓN 7 7-40

MIGUEL Á. TOLEDO MARTÍNEZ como desplazamiento a partir del inicio del archivo). Algunos ejemplos de la ubicación del apuntador de posición de archivo obtener son: //Ubica en el enésimo byte de objetoArchivo //asume ios::beg objetoArchivo.seekg(n); //Ubica n bytes hacia delante en objetoArchivo objetoArchivo.seekg(n, ios::cur); //Ubica y bytes hacia atrás con respecto al final de objetoArchivo objetoArchivo.seekg(y, ios::end); //Ubica al final de objetoArchivo objetoArchivo.seekg(0, ios::end); Es posible realizar las mismas operaciones con la función miembro seekp de ostream. Se proporcionan las funciones miembro tellg y tellp para devolver las localidades actuales de los apuntadores obtener y colocar, respectivamente. La siguiente instrucción asigna el valor del apuntador de posición de archivo obtener a la variable localidad de tipo long. Ejemplo 7.25 localidad = objetoArchivo.tellg(); El siguiente programa: CONSULTA.CPP, permite que un gerente de crédito despliegue la información de las cuentas para los clientes que tienen su saldo en cero (es decir, los clientes que no le deben dinero a la compañía), los saldos a favor (es decir, los clientes a los cuales la compañía les debe dinero) y los saldos en contra (es decir, los clientes que deben dinero a la compañía por bienes y servicios recibidos en el pasado) El programa despliega un menú y permite que el gerente de crédito dé alguna de tres opciones para obtener información de crédito. La opción 1 produce un listado de cuentas con saldo en cero. La opción 2 produce una lista de cuentas con saldos a favor. La opción 3 produce una lista de cuentas con saldos en contra. La opción 4 termina la ejecución del programa. Al dar una opción inválida simplemente se despliega la petición para que se dé otra selección. /* El siguiente programa: CONSULTA.CPP, ilustra el uso de consultas hechas a un archivo de crédito. */ #include //Para cout y ci #include //Para crear el objeto archivoCliente #include //Para setw() #include //Para exit() enum tipoRespuesta{balanceCero = 1, balanceCredito, balanceDebito, fin}; int obtenerRespuesta(); bool debeDesplegar(int, double); void lineaSalida(int, const char *, double); int main(void) { //El constructor de ifstream abre el archivo ifstream archivoCliente("clientes.dat", ios::in); FUNDAMENTOS – LECCIÓN 7 7-41

MIGUEL Á. TOLEDO MARTÍNEZ<br />

Los archivos se abren para entrada mediante la creación de un objeto de la clase ifstream. Se<br />

pasan dos argumentos al objeto –el nombre del archivo y el modo de apertura del archivo. La<br />

declaración:<br />

ifstream archivoEntrada(“clientes.dat”, ios::in);<br />

crea un objeto ifstream llamado archivoEntrada y lo asocia con el archivo clientes.dat que se<br />

abrirá para entrada. Los argumentos que están entre paréntesis se pasan a la función<br />

constructora de ifstream, la cual abre el archivo y establece una línea de comunicación con el<br />

archivo.<br />

De manera predeterminada los objetos de la clase ifstream se abren para entrada, por lo que se<br />

podría haber utilizado la instrucción:<br />

ifstream archivoEntrada(“clientes.dat”);<br />

para abrir clientes.dat para entrada. Al igual que como sucede con un objeto ofstream, se puede<br />

crear un objeto ifstream sin abrir un archivo específico y posteriormente se le puede asociar un<br />

archivo.<br />

El programa utiliza la condición !archivoEntrada para determinar si el archivo se abrió<br />

satisfactoriamente antes de intentar la recuperación de datos del archivo.<br />

La declaración while( archivoEntrada >> cuenta >> nombre >> balance ) lee un conjunto de<br />

datos (es decir, un registro) desde el archivo. Cada vez que se ejecuta la línea, se lee otro<br />

registro desde el archivo hacia las variables contador, nombre y balance. Los registros se<br />

despliegan utilizando la función lineaSalida(), la cual usa manipuladores de flujo con<br />

parámetros para formatear los datos para su despliegue. Cuando se llega al fin de archivo, la<br />

secuencia de entrada de la estructura while devuelve 0 (normalmente se devuelve el flujo<br />

archivoEntrada), el archivo se cierra por medio de la función destructor ifstream y el programa<br />

termina.<br />

Para recuperar datos secuencialmente desde un archivo, los programas comienzan, por lo<br />

general, leyendo desde el inicio del archivo y leen todos los datos en forma consecutiva hasta que<br />

se encuentra el dato deseado. Tal vez sea necesario procesar el archivo secuencialmente varias<br />

veces (desde su inicio) durante la ejecución del programa. Las clases istream y ostream<br />

proporcionan funciones miembro para reubicar el apuntador de posición de archivo (el número<br />

de byte del siguiente byte del archivo a leer o escribir). Estas funciones miembro son seekg<br />

(buscar y obtener), para la clase istream y seekp (buscar y colocar), para la clase ostream. Cada<br />

objeto istream tiene un apuntador obtener que indica el número de bytes del archivo en donde<br />

sucederá la siguiente entrada, y cada objeto ostream tiene un apuntador colocar que indica el<br />

número de byte del archivo en el cual se colocará la siguiente salida. La instrucción:<br />

archivoEntrada.seekg(0);<br />

ubica el apuntador de posición de archivo en el inicio del archivo (localidad 0) que está asociado<br />

a archivoEntrada. El argumento seekg es normalmente un entero long. Es posible especificar un<br />

segundo argumento para indicar la dirección de búsqueda, la cual puede ser ios::beg (lo<br />

predeterminado) para ubicación con relación al inicio de un flujo, ios::cur para ubicación<br />

relación a la posición actual en un flujo, e ios::end para ubicación con relación al final del flujo.<br />

El apuntador de posición de archivo es un valor entero que especifica la localidad en el archivo<br />

como un número de bytes a partir de la localidad inicial del archivo (a esto también se le conoce<br />

FUNDAMENTOS – <strong>LECCIÓN</strong> 7 7-40

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!