#半导体 #解析 #解析器 #文件读取器 #测试 #stdf #atdf

rust-stdf

一个用于解析版本为 V4 和 V4-2007 的标准测试数据格式(STDF)文件的库

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 解析器实现

MIT 许可证

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 默认启用 gzipbzip,您也可以自行控制功能。

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