Golang,写入csv文件结果文件有时为空

mr0*_*0il 2 csv parsing go

我正在处理一个可解析的表,并决定以可读的格式查看该表。当我用大语法创建csv时,它成功输出了结果。但是,解析表不正确。所以,我正在尝试使用更简单的语法进行测试。出于某种原因,这段代码用我的大语法生成了一个 csv 文件,但使用简单的语法,该文件是空白的。我在这里做错了什么?

func WriteTableToFile() {
    f, err := os.Create("tableFile3.csv")
    Check(err)
    defer f.Close()
    w := csv.NewWriter(f)
    var tsl []string
    tsl = append(tsl, " ")
    tsl, _ = UnionSlices(tsl, TerminalSymbolList)
    w.Write(tsl)
    fmt.Println(tsl)

    for ntk := range ParseTable {
        var writeSlice []string
        writeSlice = append(writeSlice, ntk)
        for _, tk := range TerminalSymbolList {
            for _, p := range ParseTable[ntk][tk] {
                writeSlice = append(writeSlice, p)
                fmt.Println("appending ", p)
            }
        }
        w.Write(writeSlice)
        fmt.Println("wrote ", writeSlice)
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

您需要调用FlushCSV 编写器的方法以确保在关闭文件之前将所有缓冲数据写入您的文件。您可以使用以下修改:

f, err := os.Create("tableFile3.csv")
Check(err)
w := csv.NewWriter(f)
defer func() {
    w.Flush()
    f.Close()
}()
Run Code Online (Sandbox Code Playgroud)

这个概念可以扩展到适用于所有使用缓冲区的编写器。

奇怪的是,该Flush方法不返回任何内容,与aerrorFlush方法返回的*bufio.Writer不同,但您可以使用该Error方法检查在前一个WriteFlush调用期间可能发生的错误。