Haskell:使用大型CSV文件和Cassava进行分段错误

时间:2017-12-09 22:15:14

标签: csv haskell

我正在尝试使用带有2个大型CSV文件的木薯。代码编译,但只是给出了分段错误'当我运行它。这是完整的代码:

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}

import Control.Applicative
import qualified Data.ByteString.Internal
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Lazy.Search as BLS
import Data.Csv
import Data.Char
import qualified Data.Vector as V

lang1 :: String
lang1 = "eng"

pattern :: Data.ByteString.Internal.ByteString
pattern = ""

checkIfLang :: String -> Bool
checkIfLang x =
if x == lang1
    then True
    else False

myOptions = defaultDecodeOptions {
  decDelimiter = fromIntegral (ord '\t')
}

main :: IO ()
main = do
sentenceCSV <- BL.readFile "sentenceData/sentences.csv"
linksCSV <- BL.readFile "sentenceData/links.csv"
case decodeWith myOptions NoHeader (BLS.replace "\"" pattern sentenceCSV) of
    Left err -> putStrLn err
    Right v -> V.forM_ v $ \ (id :: Int, lang :: String, sentence :: String) ->
        if checkIfLang lang
          then do putStrLn $ show id ++ " has lang of " ++ lang ++ "and is:"
                  putStrLn $ sentence
          else return ()

我不确定该怎么做,因为我无法通过谷歌搜索来弄清楚如何做到这一点。任何更正,即使与我的问题无关,也会帮助我学习Haskell。我非常陌生。

0 个答案:

没有答案