Go言語 – 14.CSVのパース/生成
CSVのパース/生成
CSVを扱うには次のパッケージをインポートする必要があります。
import “encoding/csv"
1行づつ読み出す
// ファイルオープン
fl, _ := os.Open("ファイルパス")
defer fl.Close()
// ファイル読み込み
rd:= csv.NewReader(fl)
// デリミタ(TSVなら\t, CSVなら,)設定
rd.Comma = ','
// コメント設定
rd.Comment = '#'
// ダブルクオートを厳密にチェックしない
rd.LazyQuotes = true
// 1行づつ読み込み
for {
record, err := rd.Read()
if err == io.EOF {
break
}
if err != nil {
// 読み込みエラー発生
fmt.Println("読み込みエラー: ", err)
break
}
// 1列目
fmt.Print(v[0])
// 2列目
fmt.Print(v[1])
// 3列目
fmt.Print(v[2])
}
CSVの書込み
records := [][]string{
[]string{"item11", "item12", "imte13"},
[]string{"item21", "item22", "imte23"},
[]string{"item31", "item32", "imte33"},
}
fl, _:= os.Create("ファイルパス")
defer fl.Close()
// 書込み
wr := csv.NewWriter(fl)
// デリミタ(TSVなら\t, CSVなら,)設定
wr.Comma = ','
//デフォルトはLFのみ
wr.UseCRLF = true
// ファイルに書き出す
for _, record := range records {
if err := wr.Write(record); err != nil {
// 書き込みエラー発生
fmt.Println("書き込みエラー発生: ", err)
return
}
// このタイミングで書込みの実施
w.Flush()
}
2次元配列を一気に出力
if err := wr.WriteAll(records); err != nil {
// 書き込みエラー発生
fmt.Println("書き込みエラー発生: ", err)
return
}
出力するitemをダブルクォートで囲みたい場合
`"` + data + `"`
と、出力したいデータをシングルでくくればOKです。
これがでれば、たいがいは処理できそうですね。






