如何更新csv::ByteRecord中的字段?
我试图解析一个CSV文件,如果某个字段匹配,则使用不同的值更新某个字段,但我不确定如何执行此操作 我的代码:如何更新csv::ByteRecord中的字段?,csv,rust,Csv,Rust,我试图解析一个CSV文件,如果某个字段匹配,则使用不同的值更新某个字段,但我不确定如何执行此操作 我的代码: extern crate csv; use std::error::Error; fn run(file: &str, output: &str) -> Result<(), Box<Error>> { let mut rdr = csv::Reader::from_path(file)?; let mut wtr = c
extern crate csv;
use std::error::Error;
fn run(file: &str, output: &str) -> Result<(), Box<Error>> {
let mut rdr = csv::Reader::from_path(file)?;
let mut wtr = csv::Writer::from_path(output)?;
wtr.write_record(rdr.byte_headers()?);
for result in rdr.byte_records() {
let mut record = result?;
if &record[0] == "05V".as_bytes() && &record[4] == "4".as_bytes() {
// let record[4] = "2"; -> Not sure how to update the field
}
wtr.write_byte_record(&record);
}
Ok(())
}
extern板条箱csv;
使用std::error::error;
fn运行(文件:&str,输出:&str)->结果{
让mut rdr=csv::Reader::from_路径(文件)?;
让mut wtr=csv::Writer::from_路径(输出)?;
wtr.write_记录(rdr.byte_头()?);
对于rdr.byte_记录()中的结果{
让mut记录=结果?;
if&record[0]=“05V.as_bytes()&&record[4]=“4.as_bytes(){
//让记录[4]=“2”->不确定如何更新字段
}
写入字节记录(&record);
}
好(())
}
如果记录符合条件,如何更新字段 你没有。ByteRecord
(和StringRecord
分机)存储。您无法轻松访问此Vec
来修改它,并且当前公开的变异方法过于粗糙,在这种情况下不可用。您可以删除记录末尾的字段或清除整个内容,但不能替换一个字段
相反,您可以在需要时创建全新的ByteRecord
,并输出:
for result in rdr.byte_records() {
let input_record = result?;
let output_record = if &input_record[0] == b"05V" && &input_record[4] == b"4" {
input_record
.into_iter()
.enumerate()
.map(|(i, v)| if i == 4 { b"2" } else { v })
.collect()
} else {
input_record
};
wtr.write_byte_record(&output_record);
}
你没有。ByteRecord
(和StringRecord
分机)存储。您无法轻松访问此Vec
来修改它,并且当前公开的变异方法过于粗糙,在这种情况下不可用。您可以删除记录末尾的字段或清除整个内容,但不能替换一个字段
相反,您可以在需要时创建全新的ByteRecord
,并输出:
for result in rdr.byte_records() {
let input_record = result?;
let output_record = if &input_record[0] == b"05V" && &input_record[4] == b"4" {
input_record
.into_iter()
.enumerate()
.map(|(i, v)| if i == 4 { b"2" } else { v })
.collect()
} else {
input_record
};
wtr.write_byte_record(&output_record);
}