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 handle
Cierre 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 handle
Leer 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 handle
Leer 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 handle
Escribir 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 handle
Escribir 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 handle
Ejercicio Práctico
Ejercicio 1: Leer y Escribir Archivos
- Crea un programa que lea el contenido de un archivo llamado
input.txt
y 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 inHandle
Resumen
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)