06.05.2013 Views

CONTENIDO DE LA LECCIÓN 8

CONTENIDO DE LA LECCIÓN 8

CONTENIDO DE LA LECCIÓN 8

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!