为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中使用 CSV 读取不同的字段行?

如何在 Go 中使用 CSV 读取不同的字段行?

Go
慕侠2389804 2022-08-24 20:15:23
我想从文件中读取数据。但文件在文件末尾有不同的字段。我也想提取这些线,当遇到.我怎么能这样做。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)    }}我的预期输出:[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 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

当返回时,您仍然在变量中获得(解析的)行,因此只需打印该行即可。这记录在 Reader.Read()中:csv.ErrFieldCountrecord

如果记录具有意外数量的字段,则 Read 会返回该记录以及错误 ErrFieldCount。

并且不要使用日志。Fatal() 在终止应用时打印消息。

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上尝试一下。


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信