#data #mdf #measurement #read-write #asam

asammdf

Read and write ASAM MDF file, simply and efficiently

1 unstable release

0.1.0 Jul 1, 2024

#490 in Compression

Apache-2.0

210KB
5K SLoC

asammdf

Read and write ASAM MDF file, simply and efficiently. Currently under development, and not ready for production use.

Features

  • Fast, use rust & mmap(todo) to boost parsing and writing speed.
  • Support MDFv3(up to 3.3), and MDFv4(up to 4.1).
    • For MDF v4.1, support DZ block which compress data using deflate or transpose method.
  • Easy to use with multi-thread program.

Examples

Read a MDFv3 file, and then write data which recordindex=0 to console.

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();

Dependencies

~6–15MB
~212K SLoC