打印缺少参数的错误消息
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);
}
}
如果存在参数(文件 .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);
}
}