Haskell:
Werken met CSV

Hoe:

Om CSV in Haskell te hanteren, kun je de cassava bibliotheek gebruiken. Installeer het door cassava toe te voegen aan je .cabal bestand of door Stack te gebruiken. Hier is hoe je CSV-gegevens kunt decoderen en coderen:

{-# LANGUAGE OverloadedStrings #-}

import Data.Csv
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V

-- Stel dat we met dit type werken
type Persoon = (String, Int, Bool)

-- Voorbeeld CSV-gegevens
csvData :: BL.ByteString
csvData = "John Doe,30,true\nJane Smith,25,false"

-- Decoderen van CSV-gegevens
decodeerMensen :: BL.ByteString -> Either String (V.Vector Persoon)
decodeerMensen = fmap snd . decode NoHeader

-- Gegevens coderen naar CSV
codeerMensen :: V.Vector Persoon -> BL.ByteString
codeerMensen = encode

-- Gebruiksvoorbeeld
main :: IO ()
main = do
  -- Decoderen
  case decodeerMensen csvData of
    Left err -> putStrLn err
    Right v -> print v
  
  -- Coderen
  let mensen = V.fromList [("Alice", 23, True), ("Bob", 35, False)]
  BL.putStrLn $ codeerMensen mensen

Voorbeelduitvoer:

[("John Doe",30,True),("Jane Smith",25,False)]
"Alice",23,True
"Bob",35,False

Diepgaande duik

De behandeling van CSV in Haskell is geëvolueerd. De vroegste methoden omvatten handmatige tekenreeksanalyse, wat foutgevoelig was. cassava biedt typeveilige parsing, steunend op het sterke typesysteem van Haskell. Alternatieven omvatten het csv pakket, maar cassava is efficiënter en flexibeler. Wat de implementatie betreft, gebruikt cassava streams voor geheugenefficiëntie en snelheid, wat belangrijk is bij het omgaan met grote datasets.

Zie ook