gpt4 book ai didi

csv - 是否可以使用Rust的csv条板箱来解析文本文件?

转载 作者:行者123 更新时间:2023-12-03 11:44:22 25 4
gpt4 key购买 nike

我有一个包含多行的文本文件。是否可以使用Rust的csv crate对其进行解析,以便将每一行都解析为不同的记录?
我尝试将b'\n'指定为字段定界符,并将记录终止符保留为默认值。我遇到的问题是,行有时可以以\r\n结尾,有时也可以以\n结尾。
但是,除非指定UnequalLengths选项,否则这会引发 flexible 错误,因为显然新行优先于字段定界符,因此下面的代码:

use csv::{ByteRecord, Reader as CsvReader, ReaderBuilder, Terminator};

fn main() {
let data = "foo,foo2\r\nbar,bar2\nbaz\r\n";
let mut reader = ReaderBuilder::new()
.delimiter(b'\n')
.has_headers(false)
.flexible(true)
.from_reader(data.as_bytes());
let mut record = ByteRecord::new();
loop {
match reader.read_byte_record(&mut record) {
Ok(true) => {},
Ok(false) => { break },
Err(csv_error) => {
println!("{}", csv_error);
break;
}
}
println!("fields: {}", record.len());
for field in record.iter() {
println!("{:?}", ::std::str::from_utf8(&field))
}
}
}
将打印:
fields: 1
Ok("foo,foo2")
fields: 2
Ok("bar,bar2")
Ok("baz")
我希望将字符串解析为3个记录,每个记录一个字段,因此预期的输出将是:
fields: 1
Ok("foo,foo2")
fields: 1
Ok("bar,bar2")
fields: 1
Ok("baz")
是否可以通过某种方式调整CSV阅读器以获取该行为?
从概念上讲,我希望字段终止符为 None,但似乎终止符必须为单个 u8

最佳答案

我想我将重新发表评论作为答案。更简洁地说,作为csv crate 的作者,我想说的是您的问题的答案是“否”。
首先,我不清楚您为什么要为此任务使用csv解析器。如评论所示,您的问题很可能没有指定。不过,仅编写自己的解析器似乎更为审慎。
其次,将定界符和终止符设置为同一事物可能是csv读取器应 panic 或返回错误的情况。从解析器的角度来看,它实际上没有任何意义,并且它的行为可能未指定。
最后,在我看来,您想要的输出表明您应该只使用iterate over the lines in your input。它应该同时为您提供所需的输出,因为它可以处理\n\r\n

关于csv - 是否可以使用Rust的csv条板箱来解析文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64883956/

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