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 解析实现
每月526次下载
用于 3 crates
49KB
772 代码行
whiteread
另一个用于轻松从字符串或输入中读取值的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
或者,您可以克隆此仓库,并只需执行以下命令: