golangでCSVパース
Excelから書き出したCSVをパースするというよく有るやつをGolangでやってみました。
|名前| email| 年齢|
|山田太郎| yamada@hoge.com| 20|
|鈴木一郎| suzuki@hoge.com| 30|
|田中花子| tanaka@hoge.lcom| 40|
こんな表を作ってCSVで保存する。
MacのExcelで保存すると改行コードがCRなのでCRLFにしておく。
go.textパッケージでSJISからUTF-8に変換するのでgo getしておく。
文字コードを変換するライブラリはいくつかあったが、中には機種依存文字の変換でエラーになるものもあったので注意
$ go get code.google.com/p/go.text/encoding
$ go get code.google.com/p/go.text/encoding/japanese
package main
import (
"os"
"encoding/csv"
"io"
"fmt"
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
)
func main(){
// CSVファイルの読み込み
file, err := os.Open("./sample.csv")
if err != nil{
panic(err)
}
defer file.Close()
// 読み込んだファイルをSJISからUTF8にコンバート
converter := transform.NewReader(file, japanese.ShiftJIS.NewDecorder())
// ループで回しつつ1行づつ読み込む
csvReader := csv.NewReader(converter)
for{
line, err := csvReader.Read()
// 終端に達したらループを抜ける
if err == io.EOF{
break
}
if err != nil{
panic(err)
}
for i:=0; i < len(line); i+=1 {
fmt.Printf("%s\n", line[i])
}
fmt.Printf("\n\n")
}
}
実行すると
$ go run sample.go
名前
email
年齢
山田太郎
yamada@hoge.com
20
鈴木一郎
suzuki@hoge.com
30
田中花子
tanaka@hoge.lcom
40