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

用字段中的空格解析空格分隔文件

用字段中的空格解析空格分隔文件

Go
扬帆大鱼 2022-05-10 16:06:59
我有一个使用空格作为分隔符的 CSV 文件。但是有些字段包含一个空格,并且这些字段用双引号括起来。任何具有空值/空值的字段都表示为“-”。非 null/空且不包含空格的字段不包含在双引号中。下面是 CSV 文件中一行的示例。foobar "foo bar" "-" "-" "-" fizzbuzz "fizz buzz" fizz buzzCSV 文件也没有标题。我打算使用一个简单的解决方案,例如这个https://stackoverflow.com/a/20769342/3299397但使用strings.Split(csvInput, " ")不会处理字段内的空格。我也查看了这个库https://github.com/gocarina/gocsv但我很好奇是否有不使用第三方库的解决方案。
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

这是“普通”CSV 格式,其中分隔符是空格字符而不是逗号或分号。encoding/csv包可以处理这个。


至于您的空/空字段:只需使用循环作为后处理步骤并将它们替换为空字符串。


使用输入:


const input = `foobar "foo bar" "-" "-" "-" fizzbuzz "fizz buzz" fizz buzz

f2 "fo ba" "-" "-" "-" fd "f b" f b`

解析和后处理它:


r := csv.NewReader(strings.NewReader(input))

r.Comma = ' '

records, err := r.ReadAll()

if err != nil {

    panic(err)

}

fmt.Printf("%#v\n", records)


for _, r := range records {

    for i, v := range r {

        if v == "-" {

            r[i] = ""

        }

    }

}

fmt.Printf("%#v\n", records)

输出(在Go Playground上试试):


[][]string{[]string{"foobar", "foo bar", "-", "-", "-", "fizzbuzz", "fizz buzz", "fizz", "buzz"}, []string{"f2", "fo ba", "-", "-", "-", "fd", "f b", "f", "b"}}

[][]string{[]string{"foobar", "foo bar", "", "", "", "fizzbuzz", "fizz buzz", "fizz", "buzz"}, []string{"f2", "fo ba", "", "", "", "fd", "f b", "f", "b"}}



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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号