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
- Voor officiële Haskell-documentatie, bekijk Haskell’s documentatie over invoer en uitvoer.
- Als je dorst hebt naar meer, savoureer een kopje kennis bij Learn You a Haskell for Great Good!.
- Verdiep je begrip van bestandsbeheer met Real World Haskell’s kijk op IO.
- Verken streamingbibliotheken voor grote bestanden met conduit en pipes.