2 个版本
0.1.1 | 2024 年 6 月 25 日 |
---|---|
0.1.0 | 2024 年 6 月 24 日 |
#713 in 文本处理
每月 29 次下载
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 特性。
许可证
依赖关系
~1.1–1.8MB
~37K SLoC