35b3c732创建于 2025年5月15日历史提交
// 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()
    }
}