Haskell:
Een tekstbestand lezen

Hoe:

Hier is hoe je Haskell tekstbestanden laat lezen zonder een druppel zweet te vergieten. Open je favoriete editor, en laten we wat code schrijven.

import System.IO

main = do
    -- Open een bestand in leesmodus
    handle <- openFile "hello.txt" ReadMode
    -- Lees de inhoud van het bestand
    content <- hGetContents handle
    -- Print de inhoud van het bestand
    putStrLn content
    -- Vergeet niet het bestandshandle te sluiten!
    hClose handle

Voer dit uit, en als je “hello.txt” hebt met “Hello, World!” erin, krijg je:

Hello, World!

Hier is een kortere, slimmere manier, hetzelfde doen met minder gedoe:

-- De 'readFile' doet het openen en lezen in één keer
main = do
    content <- readFile "hello.txt"
    putStrLn content

De output is nog steeds,

Hello, World!

Diepere Duik

Lang geleden waren programma’s asociale wezens, die voornamelijk gegevens verwerkten die ze zelf genereerden. Maar complexiteit groeide, en zo ook de behoefte om externe info binnen te trekken, dus werd het lezen van bestanden een basisbehoefte.

Haskell biedt verschillende manieren om bestanden te lezen. We kunnen het op de low-level manier doen met openFile, hGetContents, en hClose of het koeltjes spelen met readFile, die alles netjes bundelt.

readFile is lui – het leest inhoud wanneer nodig, wat geheugenefficiënt is voor grote bestanden maar kan leiden tot verrassingen als het bestand halverwege verandert. De low-level benadering geeft meer controle, waardoor het voorspelbaarder maar ook uitgebreider is. Voor gigantische teksten helpen Haskell’s hGetLine of bibliotheken zoals conduit en pipes het geheugen en de verwerking fijner te beheren.

Haskell’s standaard IO acties hanteren bestanden met behulp van de onderliggende OS-mechanismen. De bibliotheken abstraheren deze in meer gebruiksvriendelijke operaties, maar aan het einde van de dag, zijn ze gebouwd bovenop Haskell’s IO monad, wat verzekert dat acties in de juiste volgorde gebeuren.

Zie Ook