在Go中编写制表符分隔值

时间:2016-03-03 17:28:41

标签: csv go file-writing

我尝试使用Go中的tabwriter包在文件中编写制表符分隔值。

records map[string] []string
file, err := os.OpenFile(some_file,  os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
    log.Println(err)
}
w := new(tabwriter.Writer)
w.Init(file, 0, 4, 0, '\t', 0)
for _, v := range records {
    fmt.Fprintln(w, v[0],"\t",v[1],"\t",v[2],"\t",v[3])
    w.Flush()
}

我面临的问题是写入文件的记录前面有两个额外的空格。我添加了调试标志,这就是我在文件中得到的内容:

fname1  | mname1  | lname1      | age1
fname2  | mname2  | lname2      | age2

我无法看到我出错的地方。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:8)

由于SirDarius建议编码/ csv确实是正确的选择。您所要做的就是将逗号设置为水平制表符而不是默认值,不出所料是逗号。

package tabulatorseparatedvalues

import (
    "encoding/csv"
    "io"
)

func NewWriter(w io.Writer) (writer *csv.Writer) {
    writer = csv.NewWriter(w)
    writer.Comma = '\t'

    return
}