私はCSVファイルの構文解析を本当に簡単にしようとしていますが、なんらかの理由でファイルの最後の行だけを読み込みます。CSVファイルの解析を行う
私はreader.ReadAll()
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
csvfile, err := os.Open("somecsvfile.csv")
if err != nil {
fmt.Println(err)
return
}
defer csvfile.Close()
reader := csv.NewReader(csvfile)
reader.FieldsPerRecord = -1 // see the Reader struct information below
rawCSVdata, err := reader.ReadAll()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// sanity check, display to standard output
for _, each := range rawCSVdata {
fmt.Printf("email : %s and timestamp : %s\n", each[0], each[1])
}
}
を使用してみましたそして、私は単純なreader.Read()
このスニペットから
for {
row, err := csvr.Read()
if err != nil {
if err == io.EOF {
err = nil
}
}
fmt.Println(row)
}
私は本当に簡単なようで、オンラインを発見したこれらのスニペットの両方を試してみました。 CSVパッケージは、私が欲しいものを正確に記述しているようです(ReadAll()
は、CSV全体を文字列スライスに読み込む必要があります)。
CSVファイルも完全にうまく見えます。オンラインでダウンロードする私は以下のものを持っています(各行は最初の行を除いて別々のエントリです)。
何が間違っていますか?
street,city,zip,state,beds,baths,sq__ft,type,sale_date,price,latitude,longitude
3526 HIGH ST,SACRAMENTO,95838,CA,2,1,836,Residential,Wed May 21 00:00:00 EDT 2008,59222,38.631913,-121.434879
51 OMAHA CT,SACRAMENTO,95823,CA,3,1,1167,Residential,Wed May 21 00:00:00 EDT 2008,68212,38.478902,-121.431028
EDIT:
私は私が間違って何が起こっているのかが分かったと思います。下のコードで、fmt.Print(col)
をfmt.Println(col)
に変更すると、すべての行のすべての列が印刷されます。私がfmt.Print(col)
のままにしておくと、1行しか印刷しません。誰がなぜこれが起こるのか知っていますか?
私はPrint
とPrintln()
が同じように動作したと考えています。ちょうどprintln()
が新しい行を追加しますか?
// sanity check, display to standard output
for _, row := range rawCSVdata {
for _, col := range row {
_,err := fmt.Print(col)
if err != nil {
fmt.Println(err)
}
}
fmt.Println("")
}
readAll()バージョンが機能しているはずです。使用したときの出力は? –
あなたは1行にすべての行を印刷していないと確信していますか? – Chris
どうしたのですか?サブライムのようなテキストエディタでCSVファイルを開くとCSVファイルがたくさん表示されましたが、実際にはvimの "^ M"文字で区切られたのは1行だけでした。私が印刷を使用した直後は、最後の行だけが印刷されます(1行ごとに印刷するには時間がかかりすぎます)。だからちょうど私の部分でちょっとばかなミス – user3125693