#csv #csv-reader #reader-writer #rfc #utf-8

justcsv

简单的 CSV 文件读取/写入器

2 个版本

0.1.1 2024 年 6 月 25 日
0.1.0 2024 年 6 月 24 日

#713 in 文本处理

每月 29 次下载

MIT/Apache

22KB
483

Just CSV 读取/写入器

灵感来自 csv_simple crate。

符合 RFC 4180。请注意该 RFC。根据 RFC,CSV 文件是 ASCII-only,此 crate 将 CSV 文件视为 UTF-8。

读取器 API

impl<R: BufRead> reader::CsvReader<R> {
	pub fn new(reader: R) -> Self {...}
	pub fn with_config(source: R, config: Config) -> Self {...}
	pub fn headers(&self) -> Option<&[String]> {...}
}

impl<R: BufRead> Iterator for reader::CsvReader<R> {
	type Item = crate::Result<Box<[String]>>;
	...
}

struct Config {
  pub has_headers: bool,
  pub separator: char,
  pub escape: char,
}

lib.rs 中导出的 CsvReaderConfig 结构体实现了构建器模式和 Default 特性。

CsvReader::headers(...) 如果 config.has_headers == true 且成功解析第一条记录,则返回 Some。如果您传递了 config.has_headers == true 但从 CsvReader::headers(...) 获取了 None,则意味着解析第一条记录失败。请注意,在此类读取器上进行迭代是未定义行为。

写入器 API

不如读取器 API 方便。它只是在写入 dest 时帮助您转义特殊字符。

标题没有特殊处理,它们只是另一行。只有当您尝试在记录之后写入它们时,您才会收到错误。

impl<W: Write> CsvWriter<W> {
	pub fn new(dest: W) -> Self {...}
	pub fn with_config(dest: W, config: CsvWriterConfig) -> Self {...}
	pub fn write_row(&mut self, row: &[impl AsRef<str>]) -> crate::Result<()> {...}
	pub fn headers(&mut self, headers: &[impl AsRef<str>]) -> crate::Result<()> {...}
	pub fn write_doc(&mut self, doc: &[&[impl AsRef<str>]]) -> crate::Result<()> {...}
}

// as CsvWriterConfig
pub struct Config {
	pub separator: char,
  	pub escape: char,
  	pub newline: NewLine,
}

pub enum NewLine {
  	Rfc,
  	Unix,
  	Custom(String),
}

lib.rs 中导出的 CsvWriterConfig 结构体实现了构建器模式和 Default 特性。

许可证

由于 nom,该 crate 有 MIT 许可证

依赖关系

~1.1–1.8MB
~37K SLoC