Haskell:
Lettura di un file di testo
How to:
Leggere tutto il contenuto di un file:
import System.IO
main :: IO ()
main = do
content <- readFile "esempio.txt"
putStrLn content
Output:
Questo è il contenuto del file di testo.
Leggere riga per riga:
import System.IO
stampaRighe :: Handle -> IO ()
stampaRighe handle = do
eof <- hIsEOF handle
if eof
then return ()
else do
riga <- hGetLine handle
putStrLn riga
stampaRighe handle
main :: IO ()
main = do
handle <- openFile "esempio.txt" ReadMode
stampaRighe handle
hClose handle
Deep Dive
La lettura dei file di testo in Haskell è stata storicamente influenzata dal desiderio del linguaggio di trattare le operazioni di input/output (IO) in un modo funzionale pur mantenendo la purezza. Per questo motivo, le operazioni IO sono segregate nel tipo IO
.
Esistono alternative alla funzione readFile
, come readLn
o pacchetti di terze parti come text
e bytestring
che offrono performance migliorate o ulteriori funzionalità.
In dettaglio, readFile
è una funzione non bloccante, che significa che viene restituito immediatamente un “handle” per i dati, e i dati vengono letti effettivamente quando se ne ha bisogno. Questo può essere utile per la gestione di grandi quantità di dati senza sovraccaricare la memoria.
See Also
- Haskell Docs - System.IO
- Pacchetto
text
- Pacchetto
bytestring
- Tutorial su Learn You a Haskell for Great Good!