#数据 #mdf #测量 #读写 #asam

asammdf

简单高效地读写ASAM MDF文件

1个不稳定版本

0.1.0 2024年7月1日

#397压缩

Apache-2.0

210KB
5K SLoC

asammdf

简单高效地读写ASAM MDF文件。目前处于开发中,尚未准备好用于生产环境。

功能

  • 快速,使用rust & mmap(todo) 提高解析和写入速度。
  • 支持MDFv3(最高3.3)和MDFv4(最高4.1)。
    • 对于MDF v4.1,支持使用deflate或转置方法压缩数据的DZ块。
  • 易于与多线程程序一起使用。

示例

读取一个MDFv3文件,然后将recordindex=0的数据写入控制台。

use asammdf::{MDFFile,SpecVer,v3,MDFObject,IDObject, ValueFormat};
let mut file = MDFFile::new();
file.open("./mdf3.dat").unwrap();
let idblock = file.get_id::<v3::IDBlock>().unwrap();
// MDF file's magic header is "MDF     "
assert_eq!(idblock.file_id(), "MDF     ");
assert_eq!(idblock.version(), 300);
// get all channel blocks out of MDF file
let iter = file.get_node_ids::<v3::CNBlock>().unwrap().into_iter();
// get all record data with recordindex=0 of these channel blocks
let _: Vec<f64> = iter.map(|node_id| {
        let data = file.get_data_cnblock(ValueFormat::Physical, node_id, 0);
        let name = file.get_node_by_id::<v3::CNBlock>(node_id).unwrap().name();
        println!("({name},{data})");
        data
    })
    .collect();

依赖项

~6–15MB
~210K SLoC