Go言語 – 14.CSVのパース/生成

2019-02-07Go言語

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です。

これがでれば、たいがいは処理できそうですね。

 

株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ