1个不稳定版本
0.1.0 | 2023年4月30日 |
---|
#20 in #line-break
99KB
2.5K SLoC
SSV 表示空格分隔值,是CSV的替代品。
它旨在为人类编写的数据提供一种更干净的格式,避免了数字中包含逗号的麻烦,尤其是在使用逗号作为小数分隔符的语言中。
规则
- 值由至少一个空格元素序列分隔。
- 空格元素可以是空格(字节值/码点32)或制表符(字节值/码点9)。
- 行中的第一个值可以由空格 precede,这些空格将被忽略。
- 行中的最后一个值可以由空格 follow,这些空格将被忽略。
- 值行由换行符分隔。换行符是LF(字节值/码点10),可选地前面有CR(字节值/码点13)。
- 值可以用引号(
"
)括起来。 - 以下情况下值必须用引号括起来
- 值是空的;
- 值包含任何空格元素;
- 值包含换行符;
- 值只包含引号;
- 值是行中的第一个东西,并以井号(
#
)开头。
- 包含引号的值通过重复引号进行编码。
- 以井号(
#
)开头的行在下一个换行符(或内容结束)之前将被忽略。这样的行被认为是注释行。
示例
以下内容
# | 姓名 | 年龄 | 备注 |
---|---|---|---|
1 | John Doe | 53 | a.k.a. "Joe" |
77 | Mary | 23 |
可以编码为
"#" Name Age Note
1 "John Doe" 53 "a.k.a. ""Joe"""
77 Mary 23 ""
字节和字符 - 模块,导入
此SSV库有一个通用的实现,专门针对“域”
域 | 元素 | 字符串 | 字符串切片 |
---|---|---|---|
字节 | [u8 ] |
Vec<u8> |
&[u8] |
字符 | char |
字符串 |
&字符串 |
通用实现在 engine
模块中。模块 bytes
和 chars
有特殊化,它们是 engine
模块中类型的别名。使用此包的代码不应引用 engine
模块,而应仅引用特殊化模块。
读取 SSV
给定一个字节读取器(一个实现了std::io::Read
特质的值),可以使用
Tokenizer
- 一个迭代器,用于验证并返回标记,包括空白、换行符和注释。Reader
- 一个迭代器,返回行。每一行是一个包含值的Vec
。read
- 一个实用函数,用于创建一个Reader
对象。
还有一个read_file
函数,可以从给定路径的文件中读取。
写入 SSV
给定一个字节写入器(一个实现了std::io::Write
特质的值),可以使用
FluentWriter
- 一个对象,具有流畅的接口,用于写入项目。当需要时,会自动写入分隔符,如空白和换行符。Writer
- 一个对象,以行为导向进行写入。write
- 一个实用函数,它使用一个Writer
对象来写入 SSV 内容。
还有一个write_file
函数,可以从给定路径的文件中写入。