Lección 19 · 19 de 20
Archivos de texto · Pascal
Escriba y lea archivos de texto en Pascal con AssignFile, Rewrite, Append, Reset, ReadLn y CloseFile: una lista de la compra guardada en disco.

Un archivo de texto se maneja con una variable de tipo `TextFile`. `AssignFile(f, 'shopping.txt')` la asocia al nombre del archivo, que se crea en la carpeta actual, junto al programa.
`Rewrite` crea el archivo para escribir en él (si ya existía, lo vacía) y WriteLn(f, ...) escribe igual que en la consola, pero con el archivo como primer argumento. `CloseFile` lo cierra y se asegura de que todo queda guardado.
`Append` vuelve a abrir el archivo y escribe al final, sin borrar lo que había: así se añade el café a la lista.
`Reset` lo abre para leer desde la primera línea. El bucle while not Eof(f) lee una línea con ReadLn(f, line) hasta llegar al final (`Eof`, *end of file*) y numera cada producto con count.
Abrir para leer un archivo que no existe provoca un error de ejecución. Antes se puede comprobar con `FileExists`, de SysUtils: notes.txt no existe y da FALSE.
Código · main.pas
program main;uses SysUtils;var f: TextFile; line: String; count: Integer;begin // Rewrite creates the file (or empties it) to write in it. AssignFile(f, 'shopping.txt'); Rewrite(f); WriteLn(f, 'bread'); WriteLn(f, 'milk'); CloseFile(f); // Append opens it again and writes at the end. Append(f); WriteLn(f, 'coffee'); CloseFile(f); // Reset opens it to read, from the first line. Reset(f); count := 0; while not Eof(f) do begin ReadLn(f, line); Inc(count); WriteLn(count, '. ', line); end; CloseFile(f); WriteLn('Items: ', count, ' | Is there a notes.txt? ', FileExists('notes.txt'));end.Salida · fpc main.pas && ./main
1. bread 2. milk 3. coffee Items: 3 | Is there a notes.txt? FALSE
Para recordar
AssignFileasocia la variable al nombre del archivo.Rewritecrea,Appendañade yResetabre para leer.WriteLn(f, ...)yReadLn(f, ...)escriben y leen líneas.Eof(f)dice si se ha llegado al final;CloseFilecierra.
Ejercicio
Guarde en otro archivo, prices.txt, un precio por línea (2.50, 1.10 y 3.75); léalo con ReadLn(f, price) en una variable Double y escriba el total.