2016-03-03 5 views
1

Я пытаюсь записать разделительные значения вкладок в файл, используя пакет tabwriter в Go.Запись разделенных значений вкладки в 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 
}