18 个版本

0.3.0 2023 年 1 月 29 日
0.2.7 2023 年 1 月 28 日
0.2.5 2022 年 7 月 16 日
0.1.9 2022 年 6 月 16 日

#779文件系统

Download history 8/week @ 2024-04-03 30/week @ 2024-04-10 1/week @ 2024-04-24 1/week @ 2024-05-29

67 每月下载量

MIT 许可证

93KB
2K SLoC

tdms

tdms 是一个用 Rust 编写的 LabVIEW TDMS 文件解析器库。这个库旨在成为一个通用的库,用于读取和执行对文件中包含的数据的任何计算工作。

注意:这个库仍在开发中。虽然我不期望当前的功能签名和库结构会改变,但由于早期采用,您可能会遇到一些困难。功能目前有限。原始数据通道迭代器将逐步添加,并将保持一个列表,指示哪些是可用的,哪些正在建设中。

当前功能

  • 读取标准和大端编解码的文件
  • 读取带有 DAQmx 数据和数据索引的文件
  • 读取文件中的所有段,包括它们的组和通道(每个段只限)
  • 读取文件中所有段中包含的所有原始数据(目前只以 Vec<u8> 的形式)
  • 使用 log api 进行日志记录 - 库的用户必须选择并初始化实现,例如 env-logger

以下是所有支持的 TDMS 数据类型迭代器的列表。如果完全未列出,则表示该类型尚未支持。请经常查看,因为这个列表会很快增长。

数据类型 标准 交错 DAQmx
双精度浮点数 ✓ - 未测试
单精度浮点数 ✓ - 未测试 ✓ - 未测试
带单位的单精度浮点数 ✓ - 未测试 ✓ - 未测试
带单位的双精度浮点数 ✓ - 未测试 ✓ - 未测试
复数单精度浮点数 ✓ - 未测试 ✓ - 未测试
复数双精度浮点数 ✓ - 未测试 ✓ - 未测试
I8 ✓ - 未测试 ✓ - 未测试
I32 ✓ - 未测试 ✓ - 未测试
I64 ✓ - 未测试 ✓ - 未测试
U8 ✓ - 未测试 ✓ - 未测试
U16 ✓ - 未测试 ✓ - 未测试
U32 ✓ - 未测试 ✓ - 未测试
U64 ✓ - 未测试 ✓ - 未测试
布尔值 ✓ - 未测试 ✓ - 未测试
时间戳(返回元组) ✓ - 未测试 ✓ - 未测试
单精度浮点数 ✓ - 未测试 ✓ - 未测试
单精度浮点数 ✓ - 未测试 ✓ - 未测试
单精度浮点数 ✓ - 未测试 ✓ - 未测试
字符串 ✓ - 未测试

计划中的功能

  • 每个通道类型的迭代器,从编码数据通道返回原生 Rust 值
  • DAQmx 数据通道迭代器支持
  • 在字符串通道中搜索

使用方法

extern crate tdms;

use std::path::Path;
use tdms::data_type::TdmsDataType;
use tdms::TDMSFile;

fn main() {
    // open and parse the TDMS file, passing in metadata false will mean the entire file is
    // read into memory, not just the metadata
    let file = match TDMSFile::from_path(Path::new("data/standard.tdms")) {
        Ok(f) => f,
        Err(e) => panic!("{:?}", e),
    };

    // fetch groups
    let groups = file.groups();

    for group in groups {
        // fetch an IndexSet of the group's channels
        let channels = file.channels(&group);

        let mut i = 0;
        for (_, channel) in channels {
            // once you know the channel's full path (group + channel) you can ask for the full
            // channel object. In order to fetch a channel you must call the proper channel func
            // depending on your data type. Currently this feature is unimplemented but the method
            // of calling this is set down for future changes
            let full_channel = match channel.data_type {
                // the returned full channel is an iterator over raw data
                TdmsDataType::DoubleFloat(_) => file.clone().channel_data_double_float(channel),
                _ => {
                    panic!("{}", "channel for data type unimplemented")
                }
            };

            let mut full_channel_iterator = match full_channel {
                Ok(i) => i,
                Err(e) => {
                    panic!("{:?}", e)
                }
            };

            println!("{:?}", full_channel_iterator.count());

            i += 1;
        }
    }
}

贡献

欢迎提交拉取请求。对于重大更改,请首先打开一个问题来讨论您想要更改的内容。

请确保适当地更新测试。

许可证

MIT

依赖

~4MB
~80K SLoC