09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

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.

14.2. Manejo de archivos <strong>en</strong> <strong>Pascal</strong> 293<br />

función es imprescindible para realizar la lectura de archivos <strong>en</strong> los que desconocemos<br />

a priori el número de compon<strong>en</strong>tes o para detectar archivos vacíos.<br />

En el sigui<strong>en</strong>te ejemplo se pres<strong>en</strong>ta el esquema de un programa que lee un<br />

archivo completo controlando el final de archivo con EoF:<br />

Program LeerArchivo (input, output, archivoTarjetas);<br />

type<br />

tTarjeta = array[1..50] of char;<br />

tArchivo = file of tTarjeta;<br />

var<br />

archivoTarjetas: tArchivo;<br />

una Tarjeta: tTarjeta<br />

begin {LeerArchivo}<br />

...<br />

Reset(archivoTarjetas);<br />

while not EoF(archivoTarjetas) do begin<br />

Read(archivoTarjetas, unaTarjeta);<br />

Procesar unaTarjeta<br />

<strong>en</strong>d; {while}<br />

<strong>en</strong>d. {LeerArchivo}<br />

El principal inconv<strong>en</strong>i<strong>en</strong>te que pres<strong>en</strong>tan los archivos <strong>en</strong> <strong>Pascal</strong> es que no se<br />

pued<strong>en</strong> alternar las operaciones de lectura y escritura <strong>en</strong> un archivo. Por tanto,<br />

si deseamos escribir y leer un archivo, <strong>en</strong> primer lugar se t<strong>en</strong>drá que escribir <strong>en</strong><br />

él, y posteriorm<strong>en</strong>te situar el cursor al principio del archivo para leerlo.<br />

Para realizar una copia de un archivo no se puede utilizar la asignación, a<br />

difer<strong>en</strong>cia de los demás tipos de datos. Para poder copiar un archivo <strong>en</strong> otro se<br />

debe desarrollar un procedimi<strong>en</strong>to cuyo código podría ser:<br />

type<br />

tTarjeta = array[1..50] of char; {por ejemplo}<br />

tArchivoTarjetas = file of tTarjeta;<br />

...<br />

procedure CopiarArchivo(var archiEnt, archiSal: tArchivoTarjetas);<br />

{Efecto: archiSal:= archiEnt}<br />

var<br />

unaTarjeta: tTarjeta;<br />

begin<br />

Reset(archiEnt);<br />

Rewrite(archiSal);<br />

while not EoF(archiEnt) do begin<br />

Read(archiEnt, unaTarjeta);<br />

Write(archiSal, unaTarjeta)<br />

<strong>en</strong>d {while}<br />

<strong>en</strong>d; {CopiarArchivo}

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

Saved successfully!

Ooh no, something went wrong!