Strix 是一个用 Swift 编写的解析器组合子库。
dependencies: [.package(url: "https://github.com/nearfri/Strix.git", from: "2.0.0")],
targets: [.target(name: "<Your Target Name>", dependencies: ["Strix"])]
年份 | 制造商 | 型号 | 描述 | 价格 |
---|---|---|---|---|
1997 | 福特 | E350 | 空调, 防抱死刹车, 天窗 | 3000.00 |
1999 | 雪佛兰 | Venture “加长版” | 4900.00 | |
1999 | 雪佛兰 | Venture “加长版,超大” | 5000.00 | |
1996 | 吉普 | 大切诺基 | 必卖! 空气悬挂, 天窗, 豪华配置 |
4799.00 |
以上数据表格可以用 CSV 格式表示如下
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00
它由数据记录组成,数据记录由行表示,行由一个或多个字段组成,字段之间用逗号分隔。复杂的 CSV 实现允许特殊字符,例如换行符、逗号和双引号。它们通过在包含它们的字段周围加上“(双引号)字符来允许使用。嵌入的双引号用一对连续的双引号表示。
以下是一个 CSV 解析器的示例
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("non-separator", { $0 != "," && !$0.isNewline })
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)
将上述 CSV 作为 csvString
传递给 try csvParser.run(csvString)
将返回
[
["Year", "Make", "Model", "Description", "Price"],
["1997", "Ford", "E350", "ac, abs, moon", "3000.00"],
["1999", "Chevy", "Venture \"Extended Edition\"", "", "4900.00"],
["1999", "Chevy", "Venture \"Extended Edition, Very Large\"", "", "5000.00"],
["1996", "Jeep", "Grand Cherokee", "MUST SELL!\nair, moon roof, loaded", "4799.00"]
]
如果您想要更多示例,请参阅 StrixParsers。
Strix 是在 MIT 许可证下发布的。有关更多信息,请参阅 LICENSE。