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

标签 csv go delimiter

这个问题在这里已经有了答案:





Efficient read and write CSV in Go

(3 个回答)


2年前关闭。




我有一个使用空格作为分隔符的 CSV 文件。但是有些字段包含一个空格,并且这些字段用双引号括起来。任何具有空值/空值的字段都表示为“-”。非 null/空且不包含空格的字段不包含在双引号中。下面是 CSV 文件中一行的示例。

foobar "foo bar" "-" "-" "-" fizzbuzz "fizz buzz" fizz buzz

CSV 文件也没有标题。我打算使用一个简单的解决方案,比如这个 https://stackoverflow.com/a/20769342/3299397但使用 strings.Split(csvInput, " ")不会处理字段内的空格。我还查看了这个库 https://github.com/gocarina/gocsv但我很好奇是否有不使用第三方库的解决方案。

最佳答案

这是“普通”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"}}

关于csv - 使用字段中的空格解析空格分隔文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59972626/

相关文章:

c# - 如何用管道分隔的字符串(不在双引号内

mongodb - 使用 mongoimport 导入 CSV 文件是否可以导入 NULL?

csv - 谷歌表查询第一行乱七八糟

csv - Jmeter如何覆盖查看结果树的csv文件?

go - 如何在 Go 中处理来自 Druid 查询的大型 http 响应体

csv - Stata 中的 insheet 和多字符定界符

javascript - 如何将名称添加到未命名的 JSON 对象数组中?

go - 如何正确写入 `Read` 和 `Write` `net.Pipe()`

go - 将 rune 转换为int?

java - 读取在 txt 文件的多行中扩展的 double