En este tema, aprenderemos cómo manejar archivos en Haskell. Trabajar con archivos es una habilidad esencial para cualquier programador, ya que permite leer y escribir datos persistentes. Cubriremos los siguientes puntos:
- Apertura y Cierre de Archivos
- Lectura de Archivos
- Escritura en Archivos
- Manejo de Errores
- Apertura y Cierre de Archivos
Para trabajar con archivos en Haskell, utilizamos el módulo System.IO. Este módulo proporciona funciones para abrir, cerrar, leer y escribir archivos.
Apertura de Archivos
Para abrir un archivo, utilizamos la función openFile, que toma dos argumentos: el nombre del archivo y el modo de apertura (ReadMode, WriteMode, AppendMode, ReadWriteMode).
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" ReadMode
-- Realizar operaciones con el archivo
hClose handleCierre de Archivos
Es importante cerrar el archivo después de terminar de usarlo para liberar los recursos del sistema. Utilizamos la función hClose para cerrar el archivo.
- Lectura de Archivos
Haskell proporciona varias funciones para leer archivos. Las más comunes son hGetContents, hGetLine y hGetChar.
Leer Todo el Contenido del Archivo
La función hGetContents lee todo el contenido del archivo y lo devuelve como una cadena.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" ReadMode
contents <- hGetContents handle
putStrLn contents
hClose handleLeer Línea por Línea
La función hGetLine lee una línea del archivo.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" ReadMode
line <- hGetLine handle
putStrLn line
hClose handleLeer Caracter por Caracter
La función hGetChar lee un carácter del archivo.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" ReadMode
char <- hGetChar handle
putStrLn [char]
hClose handle
- Escritura en Archivos
Para escribir en archivos, utilizamos las funciones hPutStr, hPutStrLn y hPutChar.
Escribir una Cadena
La función hPutStr escribe una cadena en el archivo.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" WriteMode
hPutStr handle "Hello, Haskell!"
hClose handleEscribir una Línea
La función hPutStrLn escribe una cadena seguida de un salto de línea.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" WriteMode
hPutStrLn handle "Hello, Haskell!"
hClose handleEscribir un Carácter
La función hPutChar escribe un carácter en el archivo.
import System.IO
main :: IO ()
main = do
handle <- openFile "example.txt" WriteMode
hPutChar handle 'H'
hClose handle
- Manejo de Errores
Es importante manejar errores al trabajar con archivos para evitar que el programa falle inesperadamente. Utilizamos la función catch del módulo Control.Exception para capturar excepciones.
import System.IO
import Control.Exception
main :: IO ()
main = do
result <- try (openFile "nonexistent.txt" ReadMode) :: IO (Either IOException Handle)
case result of
Left ex -> putStrLn $ "Error: " ++ show ex
Right handle -> do
contents <- hGetContents handle
putStrLn contents
hClose handleEjercicio Práctico
Ejercicio 1: Leer y Escribir Archivos
- Crea un programa que lea el contenido de un archivo llamado
input.txty lo copie a un archivo llamadooutput.txt. - Asegúrate de manejar cualquier error que pueda ocurrir durante la lectura o escritura de los archivos.
Solución
import System.IO
import Control.Exception
main :: IO ()
main = do
result <- try (openFile "input.txt" ReadMode) :: IO (Either IOException Handle)
case result of
Left ex -> putStrLn $ "Error al abrir input.txt: " ++ show ex
Right inHandle -> do
contents <- hGetContents inHandle
outResult <- try (openFile "output.txt" WriteMode) :: IO (Either IOException Handle)
case outResult of
Left ex -> putStrLn $ "Error al abrir output.txt: " ++ show ex
Right outHandle -> do
hPutStr outHandle contents
hClose outHandle
hClose inHandleResumen
En esta sección, hemos aprendido cómo manejar archivos en Haskell. Hemos cubierto cómo abrir y cerrar archivos, leer y escribir datos, y manejar errores. Estos conceptos son fundamentales para trabajar con datos persistentes en Haskell y te preparan para tareas más avanzadas en programación funcional.
En el próximo tema, exploraremos cómo interactuar con el sistema utilizando Haskell.
Curso de Programación en Haskell
Módulo 1: Introducción a Haskell
- ¿Qué es Haskell?
- Configuración del Entorno de Haskell
- Sintaxis Básica y Hola Mundo
- Haskell REPL (GHCi)
