#white-space #input #read-input #read #text-input #text-parser #scanf

bin+lib whiteread

用于从字符串或输入中轻松读取空白分隔值的crate

7 个版本 (4 个重大更新)

使用旧的 Rust 2015

0.5.0 2019年11月29日
0.4.4 2017年11月19日
0.4.3 2017年5月23日
0.3.0 2016年6月10日
0.1.0 2015年6月3日

#1215 in 解析实现

Download history 160/week @ 2024-03-13 233/week @ 2024-03-20 249/week @ 2024-03-27 237/week @ 2024-04-03 136/week @ 2024-04-10 171/week @ 2024-04-17 189/week @ 2024-04-24 169/week @ 2024-05-01 162/week @ 2024-05-08 159/week @ 2024-05-15 150/week @ 2024-05-22 234/week @ 2024-05-29 125/week @ 2024-06-05 113/week @ 2024-06-12 143/week @ 2024-06-19 116/week @ 2024-06-26

每月526次下载
用于 3 crates

MIT 许可证

49KB
772 代码行

whiteread

Build Status

另一个用于轻松从字符串或输入中读取值的crate。

它旨在模仿 cin >> 功能,并适用于解析算法竞赛中使用的格式文本输入。

文档(0.5.0)

crate

变更日志

特性

  • 基于函数的接口(与基于宏的接口相对)。
  • 简单:只有空白可以分隔值,因此得名。(因此它不是解析任意数据的通用解决方案)。
  • 以非换行符感知模式进行解析(就像 cin >>)。(也支持行感知模式)
  • 轻松检测输入结束。
  • 适当的(Result,而不是恐慌)错误处理。
  • 没有不必要的分配和锁定。
  • "单文件"可粘贴实现,无依赖。此crate使用模块,但您可以使用 cargo run 生成一个连接的单文件模板(见下文)。

示例

从stdin读取整数

let x: i32 = parse_line()?;

元组和向量(像您喜欢一样嵌套一切)!

let tup: (i32, f64) = parse_string("  5  3.14 ")?;
let v: Vec<(String, u8)> = parse_string("one 1 two 2 three 3")?;

包装 StdinLock 以进行非基于行的解析...

let mut i = Reader::from_stdin_naive();

// (almost) equivalent to scanf("%d%d", &a, &b) or cin >> a >> b
let (a, b): (i32, i32) = i.parse()?;

...或者只是为了速度(行缓冲区只会分配一次)

while let Some((x, y)) = i.line::<Option<(usize, f32)>>()? {
	println!("{} {}", y, x);
}

读取文件(也可以使用 Reader 进行更多控制)

let number: i32 = parse_file("number.txt")?;

在失败时,默认将提供渲染的错误,即使在展开时也是如此。

Error: excessive input provided at
6 | hello world 1 2 3
                ^

安装

cargo add whiteread 或将其添加到您的 Cargo.toml

[dependencies]
whiteread = "0.5.0"

最低支持的 Rust 版本是 1.18。

在非 Cargo 环境中使用

如果您想在没有 cargo 的环境中使用此 crate,可以将 whiteread 压缩成一个单独的文件。以下是生成包含 whiteread 模块的模板的方法

$ cargo install whiteread
$ whiteread-template > my_file.rs

或者,您可以克隆此仓库,并只需执行以下命令:

无运行时依赖