6 个版本
0.3.1 | 2022年11月16日 |
---|---|
0.3.0 | 2022年11月14日 |
0.2.3 | 2022年11月2日 |
0.2.1 | 2022年10月29日 |
0.1.0 | 2022年10月6日 |
#1169 in 解析器实现
220KB
5K SLoC
rust-stdf
一个用于处理版本为 V4 和 V4-2007 的 STDF 数据日志的 Rust STDF 库。
# Cargo.toml
[dependencies]
rust-stdf = "0.3.1"
功能
以下列出了可用的功能
gzip
: 由flate2
提供支持的 gzip 压缩 (.gz) 支持bzip
: 由bzip2
提供支持的 bzip 压缩 (.bz2) 支持zipfile
: 由zip
提供支持的 zip 压缩 (.zip) 支持atdf
: ATDF 读取器 + STDF -> ATDF 转换器(开发中)serialize
: 使用serde
序列化 STDF 记录
注意: zipfile
功能包含不安全的 Rust 代码,STDF 读取器将只打开 zip 存档中的第一个文件,且不要求密码。
rust-stdf
默认启用 gzip
和 bzip
,您也可以自行控制功能。
rust-stdf = { version="0.3.1", default-features = false, features = ["gzip", ...]}
示例
以下是一个简单的示例,说明如何迭代 STDF V4 文件中的记录。在 github 仓库 中有一个较为复杂的示例,展示了如何使用现有的 API 将 STDF 转换为 Excel xlsx 文件。
use rust_stdf::{stdf_file::*, stdf_record_type::*, StdfRecord};
fn main() {
let stdf_path = "demo_file.stdf"; // "demo_file.stdf.gz" "demo_file.stdf.bz2"
let mut reader = match StdfReader::new(&stdf_path) {
Ok(r) => r,
Err(e) => {
println!("{}", e);
return;
}
};
// we will count total DUT# in the file
// and put test result of PTR named
// "continuity test" in a vector.
let mut dut_count: u64 = 0;
let mut continuity_rlt = vec![];
// use type filter to work on certain types,
// use `|` to combine multiple typs
let rec_types = REC_PIR | REC_PTR;
// iterator starts from current file position,
// if file hits EOF, it will NOT redirect to 0.
for rec in reader
.get_record_iter()
.map(|x| x.unwrap())
.filter(|x| x.is_type(rec_types))
{
match rec {
StdfRecord::PIR(_) => {dut_count += 1;}
StdfRecord::PTR(ref ptr_rec) => {
if ptr_rec.test_txt == "continuity test" {
continuity_rlt.push(ptr_rec.result);
}
}
_ => {}
}
}
println!("Total duts {} \n continuity result {:?}",
dut_count,
continuity_rlt);
}
依赖项
~1.1–2.1MB
~45K SLoC