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です。
これがでれば、たいがいは処理できそうですね。