HaskellでCSV
ふつけるを読み終わったので、記念にCSVパーザを書いてみた。
どう書く?.orgに投稿されているのより、ちょっと長めですね。
module CSVParser where import Text.ParserCombinators.Parsec csv_lines :: Parser [[String]] csv_lines = do lines <- line `sepBy` (skipMany1 $ char '\n') eof return lines line :: Parser [String] line = do cls <- column `sepBy1` (char ',') return cls last_column :: Parser String last_column = do cl <- column char '\n' return cl column :: Parser String column = do c1 <- try(quoted) return c1 <|> do c2 <- many $ noneOf ",\n" return c2 quoted :: Parser String quoted = do char '"' cs <- many quoted_char char '"' return cs quoted_char :: Parser Char quoted_char = do try (string "\"\"" ) return '\"' <|> do c <- noneOf "\"" return c