@ledsun blog

無味の味は佳境に入らざればすなわち知れず

rustを味見する 5

CSVを操作するプログラムを改造してみます。 細かい操作はよくわからないので、数値を2倍にして出力してみます。

fn main() {
    let penguin_data = "\
    common name, length (cm)
    Little Penguin, 36
    Yellow-eyed Penguin, 65
    Fiordland Penguin, 76
    Invalid, data
    ";

    let records = penguin_data.lines();

    for (i, record) in records.enumerate() {
        if i == 0 || record.trim().len() == 0 {
            continue;
        }

        let fields: Vec<_> = record.split(',').map(|field| field.trim()).collect();
        if cfg!(debug_assertions) {
            eprintln!("debug: {:?} -> {:?}", record, fields);
        }

        let name = fields[0];
        if let Ok(length) = fields[1].parse::<f32>() {
            println!("{}, {} cm", name, length * 2);
        }
    }
}

cargo runするとエラーがおきます。

f:id:ledsun:20220104105558p:plain
floatとintegerのかけ算はエラーになります。

なるほど・・・なかなか厳しいですね。 integerからfloatなら自動変換できそうなものですが、エラーになります。

22.0にするかf32i32にすればコンパイルが通ります。