打印缺少参数的错误消息

Print error message with missing parameter

如果存在参数(文件 .csv),我有以下代码可以正常工作。它必须是,在 W10 cmd 中: target\debug\testecsv < file.csv 但我输入: target\debug\testecsv 没有必需的参数“file.csv” 例程打印“开始...”并且提示保持为“等待”参数,我必须使用 Ctrl + c 完成。 如果参数“< file.csv”不存在,我想打印一条错误消息并退出例程。 提前致谢。

extern crate csv;
use std::io;
use std::process;
use std::error::Error;
use serde::Deserialize;

#[derive(Deserialize)]
struct Registro {
    dia: String,
    kg: f32
}
fn lercsv() -> Result<(), Box<dyn Error>> {
    let mut leitor = csv::Reader::from_reader(io::stdin());
    for l in leitor.deserialize() {
        let registro: Registro = l?;
        println!("dia {} peso foi {} kg", registro.dia, registro.kg);
    }
    Ok(())
}
fn main() {
    println!("begining...");
    if let Err(e) = lercsv() {
        println!("{}", e);
        process::exit(1);
    }
}

您发布的代码只是读取 shell 提供的标准输入。 您的程序不知道数据是从文件中读取的。 如果你想更好地控制错误处理,你需要自己解析 command-line,并显式读取文件。

extern crate csv;
use std::env;
use std::io;
use std::process;
use std::error::Error;
use std::fs::File;
use serde::Deserialize;

#[derive(Deserialize)]
struct Registro {
    dia: String,
    kg: f32
}

fn lercsv() -> Result<(), Box<dyn Error>> {
    // read 1st argument (after the program name itself)
    let filename = env::args().nth(1).ok_or("Missing parameter")?;
    // open the specified file and obtain a reader
    let reader = File::open(filename)?;
    let mut leitor = csv::Reader::from_reader(reader);
    for l in leitor.deserialize() {
        let registro: Registro = l?;
        println!("dia {} peso foi {} kg", registro.dia, registro.kg);
    }
    Ok(())
}

fn main() {
    println!("begining...");
    if let Err(e) = lercsv() {
        println!("{}", e);
        process::exit(1);
    }
}

Playground link