C# 读取具有时间间隔/持续时间的.TDMS文件

C# 读取具有时间间隔/持续时间的.TDMS文件,c#,C#,我正在尝试开发一个应用程序来读取.tdms(National Instruments)文件,为此我使用了“TDMSReader”包。除了那些使用设置的持续时间或时间间隔的文件之外,这一切都很好 在.tdms示例文件中,可以注意到该文件由五个通道组成,每个通道包含174080个项目。 (可以使用此选项查看文件内容) 但是,我提到的C#包没有考虑到这一点,它只能读取与“wf#U样本”字段(10240)相等的项目数量,丢弃其余的项目。是否有人找到了一个解决方案,可以读取通道的“Length”属性并提取

我正在尝试开发一个应用程序来读取.tdms(National Instruments)文件,为此我使用了“TDMSReader”包。除了那些使用设置的持续时间或时间间隔的文件之外,这一切都很好

在.tdms示例文件中,可以注意到该文件由五个通道组成,每个通道包含174080个项目。 (可以使用此选项查看文件内容)

但是,我提到的C#包没有考虑到这一点,它只能读取与“wf#U样本”字段(10240)相等的项目数量,丢弃其余的项目。是否有人找到了一个解决方案,可以读取通道的“Length”属性并提取其余的数组值

将.tdms文件转换为.csv的代码示例

                //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示例文件,我将再次将其粘贴到此处: