// DEPENDENCE: test.csv
// EXEC: cjc %import-path %L %l %f
// EXEC: ./main
import std.fs.*
import stdx.serialization.serialization.*
import stdx.encoding.json.*
import std.collection.*
import std.posix.*
import csv4cj.*
main() {
let path: String = getcwd()
println("自定义输出:")
customPrintingDemo("${path}/test.csv")
parseRecordsToEnd()
return 0
}
func parseRecordsToEnd(): Unit {
let csvContent =
###"Dan Simmons,Hyperion,"1989"
# Comment Line 1
# Comment Line 2
# Comment Line 3
Douglas Adams,The Hitchhiker's "Guide" to the Galaxy,1979
Douglas John,The Hitchhiker's "Guide" to the Mars,1979"###
let format = CSVParseFormat.DEFAULT
let csvReader = CSVReader(StringStream(csvContent))
let csvParser = CSVParser(csvReader, format)
var csvRecordList = csvParser.parseRecordsToEnd()
}
//自定义输出格式
func customPrintingDemo(fileName: String) {
//创建文件
let fileStream = File(fileName, OpenMode.Read)
if (fileStream.canRead()) {
//创建字符读取的解析流
let stream = UTF8ReaderStream(fileStream)
let reader = CSVReader(stream)
//创建格式化的解析参数
let format: CSVParseFormat = CSVParseFormat.DEFAULT.setSkipHeaderRecord(true).setFirstLineAsHeader(false)
//创建解析器
let csvParser = CSVParser(reader, format)
println(csvParser.getHeaderComment().toString())
println(csvParser.getCurrentLineNumber())
//遍历每一行解析记录
for (csvRecord in csvParser) {
let rowNo = csvRecord.getRecordNumber()
//使用表头标题获取对应列的值
let id = csvRecord.get("id", csvParser.getHeaderDict()) ?? ""
let name = csvRecord.get("name", csvParser.getHeaderDict()) ?? ""
//使用列序号获取对应列的值
let age = csvRecord.get(2)
let remark = csvRecord.get(3)
if (let Some(comment) <- csvRecord.getComment()) {
println("RowNo:${rowNo}|Id:${id}|name:${name}|age:${age}|remark:${remark}|comment:${comment}")
} else {
println("RowNo:${rowNo}|Id:${id}|name:${name}|age:${age}|remark:${remark}")
}
}
fileStream.close()
}
}