rust表格文件处理
为什么选择 csv 而不是 excel
- Excel 是一个二进制文件,只能用 Microsoft Excel 文档
- Excel 导入数据时消耗更多的内存
- Csv 是纯文本格式
- 所以您应该转换一下
// 需求:拿到title是Professor的人的姓名const MOCK_DATA: &'static str = include_str!("dept_data.csv");// 先声明包含vector的工具结构体
struct Names<'a> {inner: Vec<&'a str>,
}struct Titles<'a> {inner: Vec<&'a str>,
}// 创建结构体返回结果
#[derive(Debug)]
struct ProfessorInfo{name: String,title: String,
}impl ProfessorInfo {// 生成vec的方法fn generate_vec(names: Names, titles: Titles) -> Vec<ProfessorInfo>{let data = names.inner.iter().zip(titles.inner.iter());let mut res_vec: Vec<ProfessorInfo> = Vec::new();for (name, title) in data.filter(|tuple_item|tuple_item.1.to_string().contains("Professor")).take(3){let item = ProfessorInfo {name: name.to_string(),title: title.to_string(),};res_vec.push(item);}res_vec}
}fn main() {// 从csv字符串中提取数据let data: Vec<_> = MOCK_DATA.split('\n').skip(1).collect();let names: Vec<_> = data.iter().filter_map(|line| line.split(',').nth(1)).collect();let names = Names { inner: names };let titles: Vec<_> = data.iter().filter_map(|line| line.split(',').nth(4)).collect();let titles = Titles { inner: titles };let back = ProfessorInfo::generate_vec(names, titles);println!("{:?}", back);
}
