收到网友的群邮件,问题如下:

 做LabVIEW很长时间了,第一次碰到这么棘手的问题,希望高手能帮忙解决一下。
    我现在要用LabVIEW读取txt文件中的三列数据,每一列之间用制表符(Tab)间隔,要求:每次读取三行,第二次从第一次读取的最后一行开始读取,也就是,第一次读取1-3行,第二次读取3-5行,第三次5-7行,以此类推。读取的三行数据构成三行三列的数组,然后我要抽取每一行构成一个新的列数组,,最后得到三个列数组。
  txt文件在附件中,另外还有我自己编写的一段程序,运行结果不正确,我用单步运行查看,第一次循环数组全是0,第二次循环数组显示1-3行,第三次循环就不按规律显示了,可能是我读取电子表格的偏移量设置有问题?希望可以给高手个参考

数据文件为TXT文件,具体内容如下(截取部分):

Picture
对于文本文件,通过移动文件指针的方式来读取特定的行是非常麻烦的,固定格式的二进制文件采用移动文件指针的方式相对容易。

文本文件一般比较小,上面的数据文件也不过几十K大小,因此一次读取全部数据更为可取。且文本文件中的数据以TAB作为分隔符,分成三列数据,因此一电子表格方式可以一次读取所有数据并自动转换为2D双精度数组。

Picture
对于上面的2D数据,行代表一次多通道数据采集,列代表采集通道。网友要求每次取出3行三列作为一组,从物理意义上看,可以理解为一次测量作为一组,包含3次3个通道的数据采集。

从数组的角度看,上述要求对应的3D数组,分别有页、行、列构成,每个页包含一个2D(3*3)数组。如果我们能把上面的2D数组重构成3D数组,则网友的问题就得到了解决。

框图非常简单,我利用了“重排数组维数”函数,首先求出行数大小,因为每页包括三行,所以通过总的行数可以确定需要的页数。见下图:

Picture
可以看到第1页数据就是网友要求的3-5行数据,依次类推。

网友要求从每页数据中提取一行,构成新的数组,这相当与“降采样”操作,使用FOR循环很容易实现,见下图。

Picture
 





Leave a Reply.