3 个稳定版本
1.1.1 | 2024 年 3 月 27 日 |
---|---|
1.0.0 | 2024 年 3 月 18 日 |
#1109 在 解析器实现
53 每月下载次数
55KB
1K SLoC
CSV 工具
一个 Rust crate,可以轻松读取、操作和创建 CSV 文件,支持双引号和转义字符。
如何使用
有关该 crate 的各个方法的更多信息,请参阅 crates.io 中的文档。
目前这个 crate 不使用任何外部依赖。
简单概述
以下是一个基本概述,以下是一个示例 (langs.csv
)
language,level_of_fun,level_of_difficulty
C++,10,8
Rust,10,9
JavaScript,9,1
TypeScript,10,1
Java,0,2
HTML,10,-1
GDScript,10,1
Lua,7,1
读取文件
use csv_tools::CSVFile;
let filename = String::from("langs.csv");
let file = CSVFile::new(&filename, &',')?;
assert_eq!(file.columns, vec![
"language".to_string(),
"level_of_fun".to_string(),
"level_of_difficulty".to_string()
]);
assert_eq!(file.rows, vec![
vec!["C++".to_string(), "10".to_string(), "8".to_string()],
vec!["Rust".to_string(), "10".to_string(), "9".to_string()],
vec!["JavaScript".to_string(), "9".to_string(), "1".to_string()],
vec!["TypeScript".to_string(), "10".to_string(), "1".to_string()],
vec!["Java".to_string(), "0".to_string(), "2".to_string()],
vec!["HTML".to_string(), "10".to_string(), "-1".to_string()],
vec!["GDScript".to_string(), "10".to_string() , "1".to_string()],
vec!["Lua".to_string(), "7".to_string(), "1".to_string()],
]);
这里有很多实用方法可以帮助你更容易地操作数据
// continuing with the above example
// ...
use csv_tools::CSVCoords;
// get the value at specific coordinates
assert_eq!(file.get_cell(&CSVCoords { row: 0, column: 0 }), Some(&"C++".to_string()));
将 CSV 映射到数据结构
// continuing with the above example
// ...
#[derive(Debug, PartialEq)]
struct Language {
name: String,
level_of_fun: i32,
level_of_difficulty: i32,
}
// mapped_rows is a vector of Language.
let mapped_rows = file.map_rows(|row: &Vec<String>| {
Language {
name: row[0].clone(),
level_of_fun: row[1].parse().unwrap(),
level_of_difficulty: row[2].parse().unwrap(),
}
});
assert_eq!(mapped_rows.len(), 8);
assert_eq!(
mapped_rows[0],
Language {
name: "C++".to_string(),
level_of_fun: 10,
level_of_difficulty: 8
}
);
你还有以下方法
find_text
check_validity
trim_end
trim_start
trim
merge
(用于合并 CSV 文件)- ...