我想從文件中讀取數(shù)據(jù)。但文件在文件末尾有不同的字段。我也想提取這些線,當(dāng)遇到.我怎么能這樣做。csvErrFieldCountpackage mainimport ( "encoding/csv" "fmt" "io" "log" "strings" "errors")func main() { in := `first_name,last_name,username"Rob","Pike",robKen,Thompson,ken"Robert","Griesemer"` r := csv.NewReader(strings.NewReader(in)) for { record, err := r.Read() if err == io.EOF { break } if err != nil { if errors.Is(err, csv.ErrFieldCount) { // fmt.Println("#", differentRow") log.Fatal("wrong fields") //TODO I want to pick it up here }else{ log.Fatal(err) } } fmt.Println(record) }}我的預(yù)期輸出:[first_name last_name username][Rob Pike rob][Ken Thompson ken]# "Robert","Griesemer". <---- my expect line ...2009/11/10 23:00:00 wrong fields
1 回答

料青山看我應(yīng)如是
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)返回時(shí),您仍然在變量中獲得(解析的)行,因此只需打印該行即可。這記錄在 Reader.Read()
中:csv.ErrFieldCount
record
如果記錄具有意外數(shù)量的字段,則 Read 會返回該記錄以及錯(cuò)誤 ErrFieldCount。
并且不要使用日志。Fatal()
在終止應(yīng)用時(shí)打印消息。
if err != nil {
if errors.Is(err, csv.ErrFieldCount) {
fmt.Println("#", record)
log.Println("wrong fields")
} else {
log.Fatal(err)
}
continue
}
通過此更改,輸出就是您想要的:
[first_name last_name username]
[Rob Pike rob]
[Ken Thompson ken]
# [Robert Griesemer]
2009/11/10 23:00:00 wrong fields
在Go Playground上嘗試一下。
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)
0/150
提交
取消