#values #line-break #byte #row #quote #csv #spacing

ssv

SSV 表示空格分隔值,是CSV的替代品。

1个不稳定版本

0.1.0 2023年4月30日

#20 in #line-break

MIT 协议

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 模块中。模块 byteschars 有特殊化,它们是 engine 模块中类型的别名。使用此包的代码不应引用 engine 模块,而应仅引用特殊化模块。

读取 SSV

给定一个字节读取器(一个实现了std::io::Read特质的值),可以使用

  • Tokenizer - 一个迭代器,用于验证并返回标记,包括空白、换行符和注释。
  • Reader - 一个迭代器,返回行。每一行是一个包含值的Vec
  • read - 一个实用函数,用于创建一个Reader对象。

还有一个read_file函数,可以从给定路径的文件中读取。

写入 SSV

给定一个字节写入器(一个实现了std::io::Write特质的值),可以使用

  • FluentWriter - 一个对象,具有流畅的接口,用于写入项目。当需要时,会自动写入分隔符,如空白和换行符。
  • Writer - 一个对象,以行为导向进行写入。
  • write - 一个实用函数,它使用一个Writer对象来写入 SSV 内容。

还有一个write_file函数,可以从给定路径的文件中写入。

无运行时依赖