TDM和TDMS是一种NI的数据存储文件格式,兼顾速度、逻辑组织。对于此格式数据文件,NI提供的第三方库使用也很便捷。关于TDM和TDMS的更多叙述,请自行google、百度,或者去官网了解。这里主要给出第三方库的简单使用,及经过自己的测试,得到的关于TDM和TDMS格式的效率结论。

NI提供的第三方库使用时配置环境十分简单,把头文件、动态库布置好就行,读写文件的例子如下(从官网下载第三方库带的也有例子)://写TDM/TDMS格式文件

int CTDMSTestDlg::WriteDDCFile(const char* filePath, int channelNum, int dataLen, const char* fileType /* = "TDM" */)

{

DWORD begin = ::GetTickCount();

DDCFileHandle testFile;

DDC_CreateFile(filePath, fileType, "", "", "", "", &testFile);//创建指定格式的文件

DDCChannelGroupHandle group01;

DDC_AddChannelGroup(testFile, "group01", "", &group01);//增加一个通道组

DDCChannelHandle* channels = new DDCChannelHandle[channelNum];

double* channelData = CreateRandomData(dataLen);

for (int i = 0; i < channelNum; i++)

{

char channelIdx[20];

itoa(i, channelIdx, 10);

DDC_AddChannel(group01, DDC_Double, channelIdx, "", "", &channels[i]);//增加一个通道,注意每次增加通道时,第三个参数的值要不一样,否则会覆盖

DDC_SetDataValues(channels[i], channelData, dataLen); //为新增的通道设置数据

}

DDC_SaveFile(testFile);

DWORD end = ::GetTickCount();

DDC_CloseFile(testFile);

delete[] channels;

delete[] channelData;

return end - begin;

}//读TDM/TDMS格式文件

int CTDMSTestDlg::ReadDDCFile(const char* filePath, const char* fileType/* = "TDM"*/)

{

DWORD begin = ::GetTickCount();

DDCFileHandle ddcFile;

DDC_OpenFile(filePath, fileType, &ddcFile);//打开文件

unsigned int groupNum = 0;

DDC_GetNumChannelGroups(ddcFile, &groupNum);//获取通道组的数目

DDCChannelGroupHandle* groups = new DDCChannelGroupHandle[groupNum];

for (int i = 0; i < groupNum; i++)

{

unsigned int channelNum = 0;

DDC_GetNumChannels(groups[i], &channelNum);//获取通道的数目

DDCChannelHandle* channels = new DDCChannelHandle[channelNum];

for (int j = 0; j < channelNum; j++)

{

unsigned __int64 dataLen = 0;

DDC_GetNumDataValues(channels[j], &dataLen);//获取数据长度

double* data = new double[dataLen];

DDC_GetDataValuesDouble(channels[j], 0, dataLen, data);//获取double类型数据

for (int k = 0; k < dataLen; k++)

{

data[k];

}

}

delete[] groups;

groups = NULL;

}

DWORD end = ::GetTickCount();

DDC_CloseFile(ddcFile);

delete[] groups;

return end - begin;

}

可以看出,读写TDM和TDMS文件是非常方便的。

但是TDM和TDMS格式有什么区别呢?查过很多资料,最直接的最表象的区别就是,TDM有个XML头,其他数据用二进制保存,而TDMS的索引啊数据啊都是二进制文件。看官网的介绍,我一直以为TDMS格式是比较提倡的。后来做实验发现好像不是这么回事,我得到的结论如下(不局限于两者的区别,还包括别的结论,另外也不保证一定对,但是可以作为参考,大家相互讨论):

1、在通道数和每个通道的数据长度相同时,TDM和TDMS格式产生的文件是差不多大小的;

2、在通道数和每个通道的数据长度相同时,TDM和TDMS格式写入数据时,TDMS格式写数据总是比TDM格式花费的时间多将近一倍,读取数据的时间都差不多(两者都有索引,在多次读取数据时,花费的时间会比第一次花费的时间少,不过TDMS格式在多次访问后的读取时间始终比TDM格式的要多一点点);

3、通道数目增加到10000这个级别的时候,写数据花费的时间明显增加很多,但是数据长度的增加和写数据所花费的时间基本呈线性比例;

4、注意写入数据时要留足空间!这个第三方库产生的中间文件比最终的数据文件大小还要大很多,比如12G左右的数据文件可能需要至少32G以上的空间。不过如果数据量不大的话,比如128个通道,数据长度为102400,最终数据大小为100M,不算很大,中间文件需要的空间也就不是很大,无需担心了。

c语言ni保存成tdms文件,使用C++读写TDM以及TDMS文件相关推荐

  1. python读取数据文件-python多种读写excel等数据文件的方式(收藏篇)

    前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv.txt.json等).excel文件.数据库文件.api等其他数据文件.下面小编整理下python到底有哪些 ...

  2. php保存成乱序,PHP实现断点续传乱序合并文件的方法

    本文实例讲述了PHP实现断点续传乱序合并文件的方法.分享给大家供大家参考,具体如下: 分割成多个文件发送,由于网络原因并不上先发就能发接收到.所以我们不能按顺序合并. 分割文件源码前面一篇文章< ...

  3. android读取excel文件_python里读写excel等数据文件的几种常用方式

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  4. C语言文件操作(三) —— 文件的随机读写(fseek / lseek)

            目录 1.什么是文件的随机读写 2.认识文件随机读写函数 (1) fseek 函数 -- 移动文件指针的位置 (2) ftell 函数 -- 告知当前文件指针相对于起始位置的偏移量 ( ...

  5. C文件操作、读写文件 C++文件读写、文件操作

    转自  飘羽随风 基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...

  6. 几何实体图形保存成stl格式的ascII和二进制文。用matlab语言读入文件,给三角网格坐标值乘以2,并保存到另一stl文件。输出完成工作所用的执行时间

    1.题目: CAD/CAM软件生成几何实体图形,图形形状不限,但图形需包含曲面,分别保存成stl格式的ascII和二进制文.用matlab语言读入文件,给所有三角网格坐标值乘以2,并保存到另一stl文 ...

  7. tcpdump抓包ftp协议_tcpdump抓包并保存成cap文件

    首选介绍一下tcpdump的常用参数 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接 ...

  8. 通常我们将python语言程序保存在一个后缀_【单选题】通常我们将Python语言程序保存在一个后缀为( )的文件中。...

    问题:[单选题]通常我们将Python语言程序保存在一个后缀为( )的文件中. 更多相关问题 谢某对某公安局以其实施盗窃为由处以15日拘留的处罚不服,向法院提起行政诉讼.该局向法院提供的证 下列关于刑 ...

  9. python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据

    文章目录: 1 数据说明 2 把数据集文件信息使用python pandas保存成csv文件 3 使用python pandas 读取csv的每行.每列数据 1 数据说明 1.在test_data目录 ...

最新文章

  1. TensorFlow全家桶的落地开花 | 2019 Google开发者日
  2. mysql 单表查询
  3. C++ VS2017 QT5.12开发在xp环境下运行 [2019]亲测推荐
  4. Thinking In Machine Learning
  5. C语言结构-演员请就位
  6. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路
  7. vue封装axios接口
  8. HDU 2222 Keywords Search
  9. centos6.5下搭建oracle 11g
  10. vim配置python开发环境_GitHub - TTWShell/legolas-vim: Vim配置,为python、go开发者打造的IDE。...
  11. 优秀程序员必学的开发工具教程!
  12. 【Kettle】date类型不能被excel输出
  13. 微软官方的《Power BI权威指南》译版发售
  14. 想要挣钱创收 那就用脚本操作手机群控软件啊
  15. HTML5期末大作业:美食坊网站设计——美食坊美食购物主题(15页) HTML+CSS+JavaScript
  16. 云计算时代迎接挑战方能脱颖而出
  17. stm32f103c8t6串口数据包收发
  18. C/C++中的str系列函数大全
  19. busybox的实现原理分析(C语言实现简易版的busybox)
  20. teamviewer有linux安装教程,teamviewer linux版安装教程

热门文章

  1. cad vba 打开文件对话框_AutoCAD VBA选择文件夹的代码
  2. 【BZOJ 4010】 [HNOI2015]菜肴制作
  3. 常用JAVA项目监控工具
  4. Basler相机学习一
  5. donet 微服务开发 学习-Docker环境搭建 win7 docker 环境配置
  6. python表情库 emoji
  7. 痞子衡嵌入式:大话双核i.MXRT1170之单独在线调试从核工程的方法(IAR篇)
  8. ArcFace/InsightFace使用自己数据训练/验证过程(1)
  9. VS2010系统找不到指定的文件
  10. IOS学习003超级猜图--整合案例