2016-03-03 10 views
1

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

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 

我无法看到我要去哪里出错。任何帮助表示赞赏。

+6

您是否阅读过关于制表人包的文档?其明确的目的是明确地使用空格编写对齐的文本。您可能想使用'csv'包(https://golang.org/pkg/encoding/csv/#Writer)。 – SirDarius

回答

3

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

package tabulatorseparatedvalues 

import (
    "encoding/csv" 
    "io" 
) 

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

    return 
} 
相关问题