Lettura di un file di testo

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