CONTENIDO DE LA LECCIÓN 8
CONTENIDO DE LA LECCIÓN 8 CONTENIDO DE LA LECCIÓN 8
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
- Page 1 and 2: MIGUEL Á. TOLEDO MARTÍNEZ CONTENI
- Page 3 and 4: MIGUEL Á. TOLEDO MARTÍNEZ LECCIÓ
- Page 5 and 6: MIGUEL Á. TOLEDO MARTÍNEZ introdu
- Page 7 and 8: MIGUEL Á. TOLEDO MARTÍNEZ /* El s
- Page 9 and 10: MIGUEL Á. TOLEDO MARTÍNEZ 2, las
- Page 11 and 12: MIGUEL Á. TOLEDO MARTÍNEZ El prog
- Page 13 and 14: MIGUEL Á. TOLEDO MARTÍNEZ caso co
- Page 15 and 16: MIGUEL Á. TOLEDO MARTÍNEZ una fun
- Page 17 and 18: MIGUEL Á. TOLEDO MARTÍNEZ . [30]
- Page 19 and 20: MIGUEL Á. TOLEDO MARTÍNEZ [5] ‘
- Page 21 and 22: MIGUEL Á. TOLEDO MARTÍNEZ Cuándo
- Page 23 and 24: MIGUEL Á. TOLEDO MARTÍNEZ USO DE
- Page 25 and 26: MIGUEL Á. TOLEDO MARTÍNEZ LAS FUN
- Page 27 and 28: MIGUEL Á. TOLEDO MARTÍNEZ Miguel
- Page 29 and 30: MIGUEL Á. TOLEDO MARTÍNEZ CLASES:
- Page 31 and 32: MIGUEL Á. TOLEDO MARTÍNEZ Una vez
- Page 33 and 34: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 35 and 36: MIGUEL Á. TOLEDO MARTÍNEZ // Copi
- Page 37 and 38: MIGUEL Á. TOLEDO MARTÍNEZ ofstrea
- Page 39: MIGUEL Á. TOLEDO MARTÍNEZ LECTURA
- Page 43 and 44: MIGUEL Á. TOLEDO MARTÍNEZ { int r
- Page 45 and 46: MIGUEL Á. TOLEDO MARTÍNEZ Desplaz
- Page 47 and 48: MIGUEL Á. TOLEDO MARTÍNEZ El prog
- Page 49 and 50: MIGUEL Á. TOLEDO MARTÍNEZ /* El s
- Page 51 and 52: MIGUEL Á. TOLEDO MARTÍNEZ El prog
- Page 53 and 54: MIGUEL Á. TOLEDO MARTÍNEZ int sel
- Page 55 and 56: MIGUEL Á. TOLEDO MARTÍNEZ //Enví
- Page 57 and 58: MIGUEL Á. TOLEDO MARTÍNEZ PRIMER
- Page 59 and 60: MIGUEL Á. TOLEDO MARTÍNEZ LO QUE
- Page 61 and 62: MIGUEL Á. TOLEDO MARTÍNEZ apertur
- Page 63 and 64: MIGUEL Á. TOLEDO MARTÍNEZ b. Asig
- Page 65 and 66: MIGUEL Á. TOLEDO MARTÍNEZ 30. Ind
- Page 67 and 68: MIGUEL Á. TOLEDO MARTÍNEZ Utilice
- Page 69 and 70: MIGUEL Á. TOLEDO MARTÍNEZ double
- Page 71: MIGUEL Á. TOLEDO MARTÍNEZ } 8. #i
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