Haskell:
Làm việc với CSV

Làm thế nào:

Để xử lý CSV trong Haskell, bạn có thể sử dụng thư viện cassava. Cài đặt nó bằng cách thêm cassava vào tệp .cabal của bạn hoặc sử dụng Stack. Dưới đây là cách giải mã và mã hóa dữ liệu CSV:

{-# LANGUAGE OverloadedStrings #-}

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

-- Giả sử chúng ta đang làm việc với kiểu này
type Person = (String, Int, Bool)

-- Dữ liệu CSV mẫu
csvData :: BL.ByteString
csvData = "John Doe,30,true\nJane Smith,25,false"

-- Giải mã dữ liệu CSV
decodePeople :: BL.ByteString -> Either String (V.Vector Person)
decodePeople = fmap snd . decode NoHeader

-- Mã hóa dữ liệu thành CSV
encodePeople :: V.Vector Person -> BL.ByteString
encodePeople = encode

-- Ví dụ sử dụng
main :: IO ()
main = do
  -- Giải mã
  case decodePeople csvData of
    Left err -> putStrLn err
    Right v -> print v
  
  -- Mã hóa
  let people = V.fromList [("Alice", 23, True), ("Bob", 35, False)]
  BL.putStrLn $ encodePeople people

Đầu ra mẫu:

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

Sâu hơn

Việc xử lý CSV trong Haskell đã phát triển. Phương pháp sớm nhất liên quan đến việc phân tích cú pháp chuỗi thủ công, gây ra nhiều lỗi. cassava cung cấp phân tích cú pháp kiểu dữ liệu an toàn, dựa vào hệ thống kiểu dữ liệu mạnh mẽ của Haskell. Các lựa chọn khác bao gồm gói csv, nhưng cassava hiệu quả và linh hoạt hơn. Về mặt thực hiện, cassava sử dụng luồng để tăng hiệu quả bộ nhớ và tốc độ, điều này quan trọng khi xử lý các tập dữ liệu lớn.

Xem thêm