Vector 如何将文件中的数字列表读入Vec?
我试图从一个文件(每行都有一个数字)中读入一个带有锈迹的Vector 如何将文件中的数字列表读入Vec?,vector,rust,file-io,enums,numbers,Vector,Rust,File Io,Enums,Numbers,我试图从一个文件(每行都有一个数字)中读入一个带有锈迹的Vec。我可以使用BufReader从文件中获取作为字符串加载的数字。但是,我似乎无法从BufReader包装的Result枚举中获取字符串的值 那么,如何从Result中提取这些值进行解析,以便它们可以使用字符串以外的其他类型填充Vec 我所尝试的: 使用for循环,我可以在其中打印值以证明它们在那里,但是当我尝试使用数字进行编译时,它会在解析时出现恐慌。append(…)行 fn从文件加载(文件路径:&str){ 让file=file:
Vec
。我可以使用BufReader
从文件中获取作为字符串加载的数字。但是,我似乎无法从BufReader
包装的Result
枚举中获取字符串的值
那么,如何从Result
中提取这些值进行解析,以便它们可以使用字符串以外的其他类型填充Vec
我所尝试的:
for
循环,我可以在其中打印值以证明它们在那里,但是当我尝试使用数字进行编译时,它会在解析时出现恐慌。append(…)
行fn从文件加载(文件路径:&str){
让file=file::open(file_path).expect(“找不到文件”);
让reader=BufReader::new(文件);
让数字:Vec=Vec::new();
对于读卡器中的行。行(){
//印刷品很好
println!(“行:{:?}”,行);
append(line.unwrap().parse::());
}
}
Vec
时遇到了相同的问题fn从文件加载(文件路径:&str){
让file=file::open(file_path).expect(“找不到文件”);
让reader=BufReader::new(文件);
let编号:Vec=读卡器
.行()
.map(| line | line.unwrap().parse::().collect());
}
这不仅仅是通过
Result
enum上的unwrap()
方法来解决的。您可以调用Result
枚举中的unwrap()。固定示例:
使用std::fs::File;
使用std::io::BufReader;
使用std::io::BufRead;
fn从\u文件加载\u(文件路径:&str){
让file=file::open(file_path).expect(“找不到文件”);
让reader=BufReader::new(文件);
let编号:Vec=读卡器
.行()
.map(| line | line.unwrap().parse::().unwrap())
.收集();
}
这是否回答了您的问题?这是一个信息丰富的问题,但无助于解决我的问题或讨论结果,BufReader,etcIt通常会讨论错误处理,它主要使用Result
s。它涉及传播错误的.unwrap()
,?
运算符(表示确定
/错误
匹配的缩写)和其他转换函数。你是对的,它没有直接回答你,但我希望它能为你提供将来处理错误所必需的工具.unwrap()
是一个直截了当的工具,并不总是最好的选择。@kmdreko感谢您的解释,这是一个非常有用的问题/答案。对于那些新生锈的人来说,很难从这些信息中提取出解决此类问题所需的信息。这就是为什么我认为这两个问题都很有价值,而且距离不够近,不足以复制或在其他地方得到回答。我确实看到了它们之间的密切关系,所以你必须展开这条线来解析它,然后在地图内部再次展开以收集值?你介意再解释一下为什么你要打开两次吗?Thanks@CoderLee.lines()
可在任何缓冲读取器上工作,这意味着单个行可能因IO原因而失败。将字符串解析为i64也可能失败。由于它们都容易出错,因此都返回必须处理的结果
s(在本例中通过.unwrap()
)