It consists of data records represented by lines which are made of one or more fields separated by commas.
Sophisticated CSV implementations permit special characters such as newline, comma and double quotes.
They are allowed by requiring “ (double quote) characters around the fields containing them.
Embedded double quote are represented by a pair of consecutive double quotes.
Following is an example of a CSV parser:
import Strix
let doubleQuote: Parser<Character> = .character("\"")
let twoDoubleQuote: Parser<Character> = Parser.string("\"\"") *> .just("\"")
let escapedText: Parser<String> = Parser.many((.none(of: "\"") <|> twoDoubleQuote))
.map({ String($0) })
let escapedField: Parser<String> = doubleQuote *> escapedText <* doubleQuote
let nonSeparator: Parser<Character> = .satisfy({ $0 != "," && !$0.isNewline },
label: "non-separator")
let nonEscapedField: Parser<String> = .skipped(by: .many(nonSeparator))
let field: Parser<String> = escapedField <|> nonEscapedField
let record: Parser<[String]> = .many(field, separatedBy: .character(","))
let csvParser: Parser<[[String]]> = .many(record, separatedBy: .newline)
Passing the above CSV as csvString to try csvParser.run(csvString) will return:
Strix 🦉
Strix is a parser combinator library written in Swift.
Installation
Swift Package Manager
Example
CSV Parsing
air, moon roof, loaded
The above table of data may be represented in CSV format as follows:
It consists of data records represented by lines which are made of one or more fields separated by commas. Sophisticated CSV implementations permit special characters such as newline, comma and double quotes. They are allowed by requiring “ (double quote) characters around the fields containing them. Embedded double quote are represented by a pair of consecutive double quotes.
Following is an example of a CSV parser:
Passing the above CSV as
csvString
totry csvParser.run(csvString)
will return:If you want more examples, see StrixParsers.
License
Strix is released under the MIT license. See LICENSE for more information.