如何更新csv::ByteRecord中的字段?

如何更新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

我试图解析一个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 = 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);
}