C# 读取具有时间间隔/持续时间的.TDMS文件
我正在尝试开发一个应用程序来读取.tdms(National Instruments)文件,为此我使用了“TDMSReader”包。除了那些使用设置的持续时间或时间间隔的文件之外,这一切都很好 在.tdms示例文件中,可以注意到该文件由五个通道组成,每个通道包含174080个项目。 (可以使用此选项查看文件内容) 但是,我提到的C#包没有考虑到这一点,它只能读取与“wf#U样本”字段(10240)相等的项目数量,丢弃其余的项目。是否有人找到了一个解决方案,可以读取通道的“Length”属性并提取其余的数组值 将.tdms文件转换为.csv的代码示例C# 读取具有时间间隔/持续时间的.TDMS文件,c#,C#,我正在尝试开发一个应用程序来读取.tdms(National Instruments)文件,为此我使用了“TDMSReader”包。除了那些使用设置的持续时间或时间间隔的文件之外,这一切都很好 在.tdms示例文件中,可以注意到该文件由五个通道组成,每个通道包含174080个项目。 (可以使用此选项查看文件内容) 但是,我提到的C#包没有考虑到这一点,它只能读取与“wf#U样本”字段(10240)相等的项目数量,丢弃其余的项目。是否有人找到了一个解决方案,可以读取通道的“Length”属性并提取
//file.Fullname = full path to the .tdms file
using (var output = new StreamWriter(File.Create(file.FullName + ".csv")))
using (var tdms = new NationalInstruments.Tdms.File(file.FullName))
{
tdms.Open();
List<object[]> All_Values = new List<object[]>();
//Headers
string channels = "";
foreach (var group in tdms)
{
foreach (var channel in group)
{
channels = channels + channel.Name + ";";
All_Values.Add(channel.GetData<object>().ToArray());
}
}
output.WriteLine(channels);
//Values
long cnt = tdms.First().Channels.First().Value.DataCount;
for (int i = 0; i < cnt; i++)
{
string values = "";
foreach (object[] columnValues in All_Values)
{
values = values + columnValues[i] + ";";
}
output.WriteLine(values);
}
}
//file.Fullname=指向.tdms文件的完整路径
使用(var output=newstreamwriter(File.Create(File.FullName+“.csv”))
使用(var tdms=new NationalInstruments.tdms.File(File.FullName))
{
tdms.Open();
列出所有_值=新列表();
//标题
字符串通道=”;
foreach(tdms中的var组)
{
foreach(组中的var通道)
{
频道=频道+频道。名称+“;”;
添加(channel.GetData().ToArray());
}
}
输出写入线(通道);
//价值观
长cnt=tdms.First().Channels.First().Value.DataCount;
对于(int i=0;i
任何其他提供用C#读取.tdms文件的方法的替代方案都是受欢迎的
编辑:TDMS示例文件:
这个很好用
这一个将丢弃大部分数组值我已向提交了一份修复PR。Mike在上发布了一个新版本。您应该提供我在第二个链接中创建的tdms示例文件,我将再次将其粘贴到此处: