You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
MIGUEL Á. TOLEDO MARTÍNEZ<br />
La función read de istream introduce un número específico de bytes desde la posición actual en<br />
el flujo especificado hacia un objeto. Así:<br />
creditoEntrada.read(reinterpret_cast(&cliente),<br />
sizeof(datoCliente));<br />
lee el número de bytes especificados por sizeof(datoCliente) desde el archivo asociado con el<br />
objeto creditoEntrada de ifstream y almacena los datos en la estructura cliente. Observe que la<br />
función read requiere un primer argumento de tipo char *. Debido a que &cliente es de tipo<br />
datoCliente *, debe convertirse a char * por medio del operador de conversión mediante cast<br />
reinterpre_cast. Observe que el programa incluye el archivo de encabezado clntdata.h.<br />
El programa lee secuencialmente cada uno de los registros del archivo credito.dat, revisa cada<br />
registro para ver si contiene datos y despliega salidas formateadas para los registros que<br />
contienen datos. La condición:<br />
while(creditoEntrada && !creditoEntrada.eof())<br />
utiliza la función miembro eof() de ios para determinar si se ha llegado al final del archivo y<br />
causa que termine la ejecución de la estructura while. Asimismo, si hay algún error en la lectura<br />
del archivo, el ciclo terminará debido a que creditoEntrada se evaluará como false. lineaSalida<br />
(que toma dos argumentos, un objeto ostream y una estructura datoCliente que se enviará a la<br />
salida) envía a la salida la entrada de datos del archivo. El tipo del parámetro de ostream es<br />
interesante, debido a que cualquier objeto ostream (tal como cout) o cualquier objeto de una<br />
clase derivada de ostream (tal como un objeto de tipo ofstream) se puede proporcionar como<br />
argumento. Esto significa que la misma función puede utilizarse, por ejemplo, para realizar la<br />
salida hacia el flujo de salida estándar y hacia un flujo de archivo sin escribir funciones<br />
separadas.<br />
¿Qué hay acerca del beneficio adicional? Si examina la ventana de salida, ¡observará que los<br />
registros están listados en orden (por número de cuenta)! Esta es una consecuencia simple de la<br />
forma en que almacenamos estos registros en el archivo mediante técnicas de acceso directo. En<br />
comparación al ordenamiento de burbuja que hemos visto, el ordenamiento con técnicas de<br />
acceso directo es extremadamente rápido. La velocidad se logra haciendo que el archivo sea lo<br />
suficientemente grande como para almacenar todo registro posible que pueda crearse. Esto<br />
significa, por supuesto, que el archivo podría estar ocupado en forma dispersa la mayor parte del<br />
tiempo, lo que es un desperdicio de almacenamiento. Por lo tanto , éste es otro ejemplo del<br />
compromiso del espacio contra el tiempo: mediante el uso de grandes cantidades de espacio<br />
somos capaces de desarrollar un algoritmo de ordenamiento mucho más rápido.<br />
EJEMPLO: UN PROGRAMA <strong>DE</strong> PROCESAMIENTO <strong>DE</strong> TRANSACCIONES<br />
Ejemplo 7.29<br />
Ahora presentaremos un programa sustancial: TRANSAC.CPP, de procesamiento de<br />
transacciones, que utiliza un archivo de acceso aleatorio para lograr un procesamiento de<br />
acceso instantáneo. El programa mantiene información de cuentas bancarias, actualiza cuentas<br />
existentes, agrega nuevas cuentas, borra cuentas y almacena un listado formateado de todas las<br />
cuentas actuales en un archivo de texto para impresión. Asumimos que ya se ejecutaron los<br />
programa ALEATORIO.CPP para crear el archivo credito.dat y el programa ESCRIALEA.CPP<br />
para insertar los datos iniciales.<br />
FUNDAMENTOS – <strong>LECCIÓN</strong> 7 7-50