Usage of the CSV parser in the example

This commit is contained in:
Marten/Qqwy 2022-07-12 12:10:09 +02:00
parent 1300a56918
commit 7dfbfcba29
No known key found for this signature in database
GPG key ID: FACEF83266BDAF72
2 changed files with 28 additions and 8 deletions

View file

@ -1,5 +1,8 @@
interface Parser.CSV
exposes [
CSV,
file,
record
]
imports [
Parser.Core.{Parser, fail, const, alt, map, map2, apply, many, oneorMore, sepBy1, between, ignore},
@ -16,10 +19,19 @@ CSVField : RawStr
CSVRecord : List CSVField
CSV : List CSVRecord
file : Parser RawStr CSV
file = many recordNewline
recordNewline : Parser RawStr CSVRecord
recordNewline = map2 record crlf (\rec, _ -> rec)
record : Parser RawStr CSVRecord
record = sepBy1 field comma
field : Parser RawStr CSVField
field = alt escapedField nonescapedField
escapedField : Parser RawStr CSVField
escapedField = between (many escapedContents) dquote dquote
escapedContents = oneOf [
twodquotes |> map (\_ -> 34), # An escaped double quote
@ -29,6 +41,8 @@ escapedContents = oneOf [
textdata
]
twodquotes = string "\"\""
nonescapedField : Parser RawStr CSVField
nonescapedField = many textdata
comma = codepoint 44 # ','
cr = codepoint 13 # '\r'