Haskell:
Lese en tekstfil

Hvordan:

import System.IO

-- Enkleste måten å lese innholdet av en tekstfil:
main = do
    innhold <- readFile "eksempel.txt"
    putStr innhold

Det forventede utdata vil være innholdet av eksempel.txt vist på skjermen.

Eller med “lazy IO” for store filer:

main = do
    withFile "storfil.txt" ReadMode (\handle -> do
        innhold <- hGetContents handle
        putStr innhold)

Forventet utdata: innholdet av storfil.txt.

Dypdykk

Historisk sett har I/O vært problematisk i funksjonelle språk som Haskell grunnet deres ‘pure functions’. readFile og lignende funksjoner løser dette ved å bruke “lazy IO”, som leser filen i blokker ved behov. Et alternativ til “lazy IO” er “strict IO” der man leser hele filen på en gang, som kan være mer forutsigbart i forhold til ressursbruk og feilhåndtering.

I Haskell er det flere måter å lese filer på:

  • readFile: bra for små til medium størrelser.
  • readFile og lines: for lesing linje for linje.
  • hGetContents med withFile: “lazy IO” for store filer.
  • Biblioteker som text og bytestring for ytelse og minnehåndtering.

Implementeringsdetaljer er viktige for å forstå hvordan Haskell håndterer filer. “Lazy IO” kan være uberegnelig når det gjelder ressurser, siden det holder filen åpen til garbage-collectoren rydder opp. Med “strict IO”, vet du nøyaktig når filen lukkes.

Se Også