我正在处理一个可解析的问题,我决定以可读的格式查看该表。当我用大语法创建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)
}
}
答案 0 :(得分:2)
您需要调用CSV编写器的Flush
方法,以确保在关闭文件之前将所有缓冲的数据写入您的文件。您可以使用以下修改:
f, err := os.Create("tableFile3.csv")
Check(err)
w := csv.NewWriter(f)
defer func() {
w.Flush()
f.Close()
}()
这个概念可以扩展到适用于所有使用缓冲区的编写者。
奇怪的是,与error
returned by the Flush
method of a *bufio.Writer
不同,Flush
方法不返回任何内容,但您可以使用Error
方法检查前一个可能发生的错误Write
或Flush
致电。