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
oglines
: for lesing linje for linje.hGetContents
medwithFile
: “lazy IO” for store filer.- Biblioteker som
text
ogbytestring
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.