6个版本

0.1.5 2020年10月21日
0.1.4 2020年10月20日

#35 in #row

MIT许可

24KB
298

RSV

Build Status GitHub issues GitHub pull requests

一个为现代时代构建的Rust CSV解析器。

为什么我应该使用RSV?

有各种原因,包括这个库执行其任务不需要任何外部代码。

以下是一些功能

  • Serde参考 1免费序列化参考 2
  • 易于使用的API
  • 通用、灵活的输出格式

安装

将此行添加到您的 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