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

我想从文件中读取数据。但文件在文件末尾有不同的字段。我也想提取这些线,当遇到.我怎么能这样做。csvErrFieldCount


package main


import (

    "encoding/csv"

    "fmt"

    "io"

    "log"

    "strings"

    "errors"

)


func main() {

    in := `first_name,last_name,username

"Rob","Pike",rob

Ken,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


慕侠2389804
浏览 95回答 1
1回答

料青山看我应如是

当返回时,您仍然在变量中获得(解析的)行,因此只需打印该行即可。这记录在&nbsp;Reader.Read()中:csv.ErrFieldCountrecord如果记录具有意外数量的字段,则 Read 会返回该记录以及错误 ErrFieldCount。并且不要使用日志。Fatal()&nbsp;在终止应用时打印消息。if err != nil {&nbsp; &nbsp; if errors.Is(err, csv.ErrFieldCount) {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("#", record)&nbsp; &nbsp; &nbsp; &nbsp; log.Println("wrong fields")&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; continue}通过此更改,输出就是您想要的:[first_name last_name username][Rob Pike rob][Ken Thompson ken]# [Robert Griesemer]2009/11/10 23:00:00 wrong fields在Go Playground上尝试一下。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go