Haskell:
Textdatei einlesen
So geht’s:
Um eine Textdatei in Haskell zu lesen, nutzen wir die Standardbibliothek. Hier ein kurzes Beispiel:
import System.IO
main :: IO ()
main = do
fileContent <- readFile "beispiel.txt"
putStrLn fileContent
Ausgabe könnte sein:
Hallo, dies ist der Inhalt meiner Datei!
Du kannst auch sicherere Methoden mit withFile
verwenden, um mit dem Datei-Handle direkt zu arbeiten und sicherzustellen, dass die Datei richtig geschlossen wird:
import System.IO
main :: IO ()
main = withFile "beispiel.txt" ReadMode (\handle -> do
fileContent <- hGetContents handle
putStrLn fileContent)
Deep Dive
Das Lesen von Dateien in Haskell hat eine reiche Geschichte. Frühe Funktionen wie readFile
sind für einfache Anwendungen prima, aber sie laden die ganze Datei in den Speicher – problematisch bei sehr großen Dateien. Deshalb führen spätere Versionen von Haskell ByteString
und Text
, performante Alternativen für String
, ein. Mit Streams, etwa durch die Bibliothek conduit
oder pipes
, können Daten fließend verarbeitet werden, ohne alles in den Speicher zu laden.
Bezüglich der Implementation, Haskell verwendet Lazy I/O bei Standard-Funktionen wie readFile
, wodurch die Daten erst gelesen werden, wenn sie im Programm benötigt werden. Das ist magisch, kann aber zu schwer nachverfolgbaren Bugs führen, wenn nicht sorgfältig verwendet. Strikte I/O, zum Beispiel über Data.Text.IO.readFile
, liest Daten sofort, was oft einfacher zu kontrollieren ist.