6个版本
0.1.5 | 2020年10月21日 |
---|---|
0.1.4 | 2020年10月20日 |
#35 in #row
24KB
298 行
RSV
一个为现代时代构建的Rust CSV解析器。
为什么我应该使用RSV?
有各种原因,包括这个库执行其任务不需要任何外部代码。
以下是一些功能
安装
将此行添加到您的 Cargo.toml
rustsv = "0.1.5"
文档
您可以在此处阅读完整文档。
基本用法
解析基本CSV字符串
use rustsv::prelude::*;
// Create our input data
let input: String = "surname,initial,address,phone number\
Smith,A,\"14 Made up Drive, Made up City, Ohio\",216-235-3744\
Doe,J,\"15 Fake Street, Phonyville, Texas\",210-214-5737".to_string();
// Parse the `input` into `Content`
// The parameters are as follows:
// 1. Input: String - The text you wish to parse
// 2. Delimiter: Char - The character to delimit by
// 3. Headers: Bool - If the parser should use the first row in the file as headers
let content: Content = parse(input, ',', true);
解析CSV文件
use rustsv::prelude::*;
// Parse the `input` into `Content`
// The parameters are as follows:
// 1. Path: String - The path to the file you wish to parse
// 2. Delimiter: Char - The character to delimit by
// 3. Headers: Bool - If the parser should use the first row in the file as headers
let content: Content = read("./path/to/file.csv", ',', true)?;
从URL解析远程文件
此方法需要启用
http
功能参考 3
use rustsv::prelude::*;
// Parse the content of `URL` into `Content`
// The parameters are as follows:
// 1. URL: String - The URL of the file wish to parse
// 2. Delimiter: Char - The character to delimit by
// 3. Headers: Bool - If the parser should use the first row in the file as headers
let content: Content = fetch("https://domain.tld/path/to/file.csv", ',', true)?;
从Content
获取数据
Content
结构非常灵活,您可以将其用作Iterator
,或作为类似数组的Index
。
作为Iterator
let content: Content = read("./path/to/file.csv", ',', true);
for entry in content {
//do stuff
}
作为Index
let content: Content = read("./path/to/file.csv", ',', true);
let first_row: Entry = content[0];
什么是Entry
?
Entry
结构是容纳输入中每行数据的容器,它的工作方式与它的Content
父级类似。
Entry
作为Iterator
let content: Content = read("./path/to/file.csv", ',', true);
let first_row: Entry = content[0];
for key_pair in first_row {
println!("Key: {}, Value: {}", key_pair.0, key_pair.1);
}
Entry
作为Index
let content: Content = read("./path/to/file.csv", ',', true);
let first_row: Entry = content[0];
let entry_name: String = first_row["name"];
现在,我知道你们在想什么,“这不太像Rust风格”,不用担心,对于所有坚持使用Rust API的用户,我很快会为你们提供更新,但现在我正在慢慢介绍这个API。
接下来是什么?
我已经有了关于我希望在下一个版本中提供的功能的想法,所以我将非常努力地工作。
我如何贡献?
目前,我唯一希望的贡献方式是通过GitHub问题,因为这些是我最容易跟踪的,但这并不意味着排除了PR的可能性,因此,您可以根据自己的意愿提供帮助,不过我对于PR的响应速度比问题要慢得多。
发现了bug吗?有功能请求吗?
如果您发现了bug或想请求一个功能,最佳的方式是在GitHub问题中报告这些bug和提出这些功能。
恭喜你,你已经到达了文档的结尾,我只是想感谢你阅读这些信息。
参考文献
参考文献 1: "Serde"
Serde 是一个序列化和反序列化实用工具,为几乎所有现有的(反)序列化库提供了基础,我计划在下一个重大更新中将 Serde 兼容性集成到 RSV 中。
参考文献 2: "Serde free serialization"
这仅仅意味着你不需要使用 Serde 来序列化你的数据,这是其他大多数 CSV 库似乎都存在的缺陷。
参考文献 3: http
功能
要启用 RSV 的 HTTP 功能,请修改你的 RustSV 依赖项,使其看起来像这样
rustsv = { version = "0.1.5", features = ["http"] }
依赖项
约 2.5–6.5MB
约 149K SLoC