29/06/2025
En el vasto universo de la programación, la capacidad de interactuar con el sistema de archivos es una habilidad fundamental. Permite a nuestros programas almacenar información de forma persistente, es decir, que los datos no se pierdan una vez que el programa finaliza su ejecución. Cuando hablamos de Pascal, la creación y manipulación de archivos de texto es un proceso estructurado que, una vez comprendido, abre un sinfín de posibilidades para gestionar datos, configuraciones, registros y mucho más.

Aunque es cierto que los archivos de texto pueden ser generados con editores externos como WordPad o cualquier procesador de texto guardándolos como 'Sólo Texto', la verdadera potencia y control se obtienen al crearlos y gestionarlos directamente desde nuestro código Pascal. Este artículo explorará en profundidad cómo realizar estas operaciones, asegurando que tus programas puedan interactuar eficientemente con el entorno de almacenamiento.
- Conceptos Fundamentales de Archivos de Texto en Pascal
- Creando y Escribiendo en Archivos de Texto
- Añadiendo Contenido a un Archivo Existente: Append
- Leyendo Contenido de Archivos de Texto: Reset
- Manejo de Errores en Archivos
- Tabla Comparativa de Operaciones de Apertura de Archivos
- Preguntas Frecuentes sobre Archivos de Texto en Pascal
- ¿Cuál es la diferencia principal entre Write y Writeln al escribir en un archivo?
- ¿Cómo puedo verificar si un archivo existe antes de intentar abrirlo?
- ¿Qué sucede si no cierro un archivo con Close?
- ¿Puedo borrar un archivo de texto desde mi programa Pascal?
- ¿Cómo manejo rutas de archivo completas (directorios) en Pascal?
- Conclusión
Conceptos Fundamentales de Archivos de Texto en Pascal
Antes de sumergirnos en el código, es crucial entender cómo Pascal concibe y maneja los archivos. En Pascal, un archivo de texto es una secuencia de caracteres, dividida en líneas por marcadores de fin de línea. La característica más importante y obligatoria cuando trabajamos con ellos en Pascal es su declaración.
Declaración de un Archivo de Texto
Todo archivo que vayas a manipular en Pascal debe ser declarado como una variable de tipo Text. Esta declaración actúa como un 'identificador' o 'manejador' para el archivo dentro de tu programa, permitiéndote referenciarlo en las operaciones de lectura y escritura.
VAR MiArchivo: Text; LineaTexto: String;En este ejemplo, MiArchivo es la variable que utilizaremos para interactuar con el archivo físico en el disco.
Asignando un Nombre de Archivo: La Función Assign
Una vez declarada la variable de tipo Text, el siguiente paso es asociarla con un nombre de archivo real en el sistema operativo. Esto se logra con la función Assign. Es vital realizar esta asignación antes de intentar abrir el archivo.
Assign(MiArchivo, 'datos.txt');Aquí, MiArchivo se asocia con el nombre de archivo 'datos.txt'. Si 'datos.txt' no especifica una ruta completa, el sistema operativo buscará o creará el archivo en el directorio de trabajo actual del programa.
Creando y Escribiendo en Archivos de Texto
La creación de un archivo de texto, o la preparación de uno existente para su escritura, se realiza a través de la función Rewrite. Esta función tiene una particularidad importante: si el archivo especificado ya existe, Rewrite lo truncará (vaciará su contenido) antes de abrirlo para escritura. Si el archivo no existe, lo creará.
Abriendo un Archivo para Escritura: Rewrite
Assign(MiArchivo, 'salida.txt'); Rewrite(MiArchivo); // Crea o sobrescribe 'salida.txt'Escribiendo Contenido: Write y Writeln
Una vez que el archivo está abierto para escritura, puedes usar las funciones Write y Writeln, muy similares a sus contrapartes para salida en pantalla, para enviar datos al archivo. La diferencia principal es que Writeln añade un carácter de nueva línea al final de lo que se escribe, mientras que Write no lo hace.
Write(MiArchivo, 'Hola, '); Writeln(MiArchivo, 'mundo!'); Writeln(MiArchivo, 'Esta es la segunda linea.'); Write(MiArchivo, 'Numero: ', 123);El código anterior crearía un archivo 'salida.txt' con el siguiente contenido:
Hola, mundo! Esta es la segunda linea. Numero: 123Cerrando el Archivo: Close
Después de realizar todas las operaciones de escritura, es absolutamente esencial cerrar el archivo utilizando la función Close. Esto asegura que todos los datos en el búfer interno del programa sean volcados al disco y que los recursos del sistema sean liberados. No cerrar un archivo puede resultar en pérdida de datos o corrupción del archivo.
Close(MiArchivo);Un ejemplo completo de creación y escritura:
PROGRAM CrearArchivoTexto; VAR MiArchivo: Text; Nombre: String; Edad: Integer; BEGIN Assign(MiArchivo, 'informacion.txt'); Rewrite(MiArchivo); // Prepara el archivo para escritura (lo crea o vacía) Writeln(MiArchivo, '--- Datos de Usuario ---'); Writeln(MiArchivo, 'Nombre: Juan Perez'); Writeln(MiArchivo, 'Edad: 30'); Writeln(MiArchivo, 'Ocupacion: Programador'); // También podemos solicitar entrada al usuario y escribirla Write('Ingrese su nombre: '); Readln(Nombre); Write('Ingrese su edad: '); Readln(Edad); Writeln(MiArchivo, '--- Datos Ingresados ---'); Writeln(MiArchivo, 'Nombre ingresado: ', Nombre); Writeln(MiArchivo, 'Edad ingresada: ', Edad); Close(MiArchivo); // Cierra el archivo Writeln('Archivo "informacion.txt" creado y escrito exitosamente.'); END.Añadiendo Contenido a un Archivo Existente: Append
Si deseas añadir contenido al final de un archivo existente sin borrar su contenido previo, la función Append es tu aliada. Si el archivo no existe, Append lo creará, comportándose de manera similar a Rewrite en ese caso.
Assign(MiArchivo, 'registro.log'); Append(MiArchivo); // Abre 'registro.log' para añadir contenido al final Writeln(MiArchivo, 'Nuevo evento registrado a las ', Time); // Asumiendo Time existe o es una variable de tiempo Close(MiArchivo);Leyendo Contenido de Archivos de Texto: Reset
Aunque el enfoque principal es la creación, la lectura es el complemento natural de la escritura. Para leer un archivo de texto existente, se utiliza la función Reset. Esta función abre un archivo existente para lectura y posiciona el puntero al principio del archivo. Si el archivo no existe, Reset generará un error de tiempo de ejecución a menos que se maneje explícitamente.

Assign(MiArchivo, 'datos.txt'); Reset(MiArchivo); // Abre 'datos.txt' para lectura Leyendo Datos: Read y Readln
Para leer datos del archivo, se utilizan Read y Readln. Readln lee una línea completa hasta el carácter de fin de línea y avanza el puntero a la siguiente línea, mientras que Read lee valores específicos hasta que encuentra un espacio en blanco o un fin de línea, sin avanzar automáticamente a la siguiente línea.
Para saber cuándo se ha llegado al final del archivo, se utiliza la función Eof (End Of File). Eof(MiArchivo) devuelve TRUE si el puntero de lectura ha llegado al final del archivo.
PROGRAM LeerArchivoTexto; VAR MiArchivo: Text; Linea: String; BEGIN Assign(MiArchivo, 'informacion.txt'); {$I-} Reset(MiArchivo); // Intenta abrir el archivo {$I+} IF IOResult <> 0 THEN BEGIN Writeln('Error: El archivo "informacion.txt" no se pudo abrir o no existe.'); END ELSE BEGIN Writeln('--- Contenido de informacion.txt ---'); WHILE NOT Eof(MiArchivo) DO BEGIN Readln(MiArchivo, Linea); Writeln(Linea); // Muestra la línea en pantalla END; Close(MiArchivo); END; END.Manejo de Errores en Archivos
Las operaciones de archivo pueden fallar por diversas razones: el archivo no existe, no hay permisos de escritura, el disco está lleno, etc. En Pascal, el manejo de errores para E/S (Entrada/Salida) se realiza tradicionalmente con la función IOResult y la directiva del compilador {$I-}.
La directiva {$I-} (o {$I OFF}) desactiva la verificación de errores de E/S en tiempo de ejecución. Después de una operación de E/S con la verificación desactivada, puedes llamar a IOResult para obtener el código de error. Un valor de 0 indica éxito, mientras que cualquier otro valor indica un error específico.
Assign(MiArchivo, 'archivo_inexistente.txt'); {$I-} // Desactiva el chequeo de errores de E/S Reset(MiArchivo); {$I+} // Reactiva el chequeo de errores de E/S IF IOResult <> 0 THEN BEGIN Writeln('Error al abrir el archivo. Código: ', IOResult); // 2 = File not found END ELSE BEGIN Writeln('Archivo abierto exitosamente.'); Close(MiArchivo); END;Es una buena práctica restaurar la directiva {$I+} (o {$I ON}) inmediatamente después de la operación que deseas verificar, para que otros errores no pasen desapercibidos.
Tabla Comparativa de Operaciones de Apertura de Archivos
Para consolidar el conocimiento de las funciones de apertura de archivos, aquí tienes una tabla comparativa:
| Función | Propósito | Comportamiento si el archivo existe | Comportamiento si el archivo NO existe |
|---|---|---|---|
Rewrite(F) | Abrir para escritura | Truncado (vacía el contenido) | Crea un nuevo archivo |
Append(F) | Abrir para añadir | Posiciona el puntero al final del archivo | Crea un nuevo archivo |
Reset(F) | Abrir para lectura | Posiciona el puntero al principio del archivo | Genera un error (File not found) |
Preguntas Frecuentes sobre Archivos de Texto en Pascal
¿Cuál es la diferencia principal entre Write y Writeln al escribir en un archivo?
La diferencia es idéntica a cuando se usan con la salida estándar (consola). Write escribe los datos y deja el cursor (o puntero de archivo) justo después del último carácter escrito. Writeln escribe los datos y luego añade un carácter de fin de línea (o salto de línea), moviendo el cursor a la siguiente línea. Esto es crucial para la legibilidad del archivo de texto.
¿Cómo puedo verificar si un archivo existe antes de intentar abrirlo?
Pascal estándar no tiene una función directa FileExists para archivos de tipo Text. La forma común de hacerlo es intentar abrir el archivo con Reset dentro de un bloque {$I-} ... {$I+} y luego verificar IOResult. Si IOResult devuelve 2 (File not found), entonces el archivo no existe. Si el valor es 0, el archivo existe y se abrió correctamente.
¿Qué sucede si no cierro un archivo con Close?
No cerrar un archivo es una práctica muy peligrosa. Puede llevar a la pérdida de datos (los datos en el búfer de salida no se escriben en el disco), corrupción del archivo, o que el sistema operativo mantenga el archivo bloqueado, impidiendo que otros programas lo accedan o que tu propio programa lo vuelva a abrir correctamente. Siempre cierra tus archivos una vez que hayas terminado de usarlos.
¿Puedo borrar un archivo de texto desde mi programa Pascal?
Sí, puedes usar la función Erase(F) para eliminar un archivo del disco. Asegúrate de que el archivo no esté abierto cuando intentes borrarlo. Después de Erase, puedes usar IOResult para verificar si la operación fue exitosa.
Assign(MiArchivo, 'archivo_a_borrar.txt'); {$I-} Erase(MiArchivo); {$I+} IF IOResult = 0 THEN Writeln('Archivo borrado exitosamente.') ELSE Writeln('Error al borrar el archivo. Código: ', IOResult);¿Cómo manejo rutas de archivo completas (directorios) en Pascal?
Simplemente incluye la ruta completa en la cadena de texto que pasas a Assign. Por ejemplo: Assign(MiArchivo, 'C:\MisDocumentos\datos\registro.log');. Ten en cuenta que en Windows, las barras invertidas deben ser duplicadas (escapadas) si se usan dentro de una cadena de texto, o puedes usar barras diagonales simples (/) que son más portables: Assign(MiArchivo, 'C:/MisDocumentos/datos/registro.log');.
Conclusión
La manipulación de archivos de texto en Pascal es una habilidad esencial para cualquier programador. Desde la simple declaración de una variable Text hasta el uso de Assign, Rewrite, Writeln, y Close, cada paso es crucial para garantizar que tus programas puedan almacenar y recuperar información de manera confiable. Dominar estas operaciones no solo te permitirá construir aplicaciones más robustas, sino que también te brindará un control fundamental sobre cómo tus programas interactúan con el entorno persistente. Recuerda siempre la importancia de cerrar tus archivos y manejar los posibles errores para asegurar la integridad de tus datos.
Si quieres conocer otros artículos parecidos a Creando Archivos de Texto en Pascal: La Guía Completa puedes visitar la categoría Librerías.
