"\x00" 来修复它 ["col1-6ren">
gpt4 book ai didi

ruby - 如何在 ruby​​ 中使用奇怪的引号读取 CSV?

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:40 27 4
gpt4 key购买 nike

我有一些 CSV 文件,例如:

col1,col "two",col3

所以我得到了 Illegal quoting 错误并通过设置 :quote_char => "\x00" 来修复它

["col1", "col\"two\"", "col3"]

但是有这样一行

col1,col2,"col,3"

稍后在该文件中

["col1", "col2", "\"col", "3\""]

然后我逐行读取文件并调用包裹在 block 中的parse_csv。设置 :quote_char => "\"", rescue CSV::MalformedCSVError 异常并针对特定行设置 :quote_char => "\x00"重试

一切正常,直到我们排队

col1,col "two","col,3"

在这种情况下,它从异常中拯救,设置:quote_char => "\x00" 结果是

["col1", "col\"two\"", "\"col", "3\""]

Apple Numbers 能够绝对正确地打开该文件。

parse_csv 是否有任何设置可以在不以某种方式预处理字符串的情况下处理此问题?

UPD 我显示文件中的 CSV 行和 p 打印的结果(数组)。我的字符串中没有实际的 \"

最佳答案

这是一个无效的 csv 文件。如果您有权访问源,您可以(要求)生成如下数据:

col1,"col ""two""","col,3"

如果没有,唯一的选择就是自己解析数据:

pseudocode:

while(read_line) {

bool InsideQuotes = false
for each_char_in_line {

if(char == doublequote)
InsideQuotes = !InsideQuotes

if(char == ',' and !InsideQuotes)
// separator found - process field
}
}

这也将处理像 col1,"col ""two""","col,3" 中的转义引号。

如果文件包含多行字段,则需要做更多的工作。

关于ruby - 如何在 ruby​​ 中使用奇怪的引号读取 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com