実現したいこと
Rustを用いて以下のcsvファイルの読み込みたいです。
3行目以降の情報が必要ですが、エラーのためうまく動いていません。
「csvの途中から読み取る方法」や「規則が変わるcsvの読み取る方法」等わかる方がいましたら、アドバイスいただけると幸いです。
test.csv
1[年度],2022年度,[学期],1, 2[テスト名],中間テスト,[学年],3年, 3姓,名,点数, 4AA,aaa,97, 5BB,bbbb,15, 6CC,cccc,66, 7DD,ddd,73, 8EE,eeeee,42, 9FF,fffff,52, 10GG,ggg,64, 11HH,h,86, 12II,iii,88, 13JJ,jjjj,72,
発生している問題・エラーメッセージ
1,2行目と3行目以降でcsvの規則が異なっているため、3行目でエラーが発生してしまいます。
StringRecord(["[年度]", "2022年度", "[学期]", "1", ""]) StringRecord(["[テスト名]", "中間テスト", "[学年]", "3年", ""]) Error: Error(UnequalLengths { pos: Some(Position { byte: 79, line: 2, record: 2 }), expected_len: 5, len: 4 }) error: process didn't exit successfully: `target\debug\read_csv.exe` (exit code: 1)
該当のソースコード
Rust
1use csv::Error; 2use csv::ReaderBuilder; 3use encoding_rs; 4use std::fs; 5 6fn main() -> Result<(), Error> { 7 let path = "./test.csv"; 8 let file = fs::read(path).unwrap(); 9 let (res, _, _) = encoding_rs::SHIFT_JIS.decode(&file); 10 11 let mut reader = ReaderBuilder::new() 12 .has_headers(false) 13 .from_reader(res.as_bytes()); 14 15 for result in reader.records() { 16 let record = result?; 17 println!("{:?}", record) 18 } 19 20 Ok(()) 21}
補足情報(FW/ツールのバージョンなど)
cargo = "1.62.0"
rustc = "1.62.0"
csv = "1.1.6"
encoding_rs = "0.8.31"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/25 01:28