大家好,我尝试用事件结构来实现如下的思路,但是遇到了很大的困难,麻烦各位高手指点小弟一下:
针对一类文件来处理,每个文件包含4个字节数相同的部分(为了表述方便,定义为A,B,C,D);每个部分里还包含字节数相同的3个小部分(定义为1,2,3),即文件的数据内容可能是A11111 22222 33333 B11111 22222 33333 C11111 22222 33333 D11111 22222 33333。
首先通过按钮一来打开对话框选择文件,然后在通过按钮二来选择读取的是ABCD中的哪部分,然后在通过按钮三来选择读取1,2,3中的哪部分。
抽象后大致就是上面的过程,感觉实现起来实在是有些复杂,不知道大家怎么看这个问题,如果有其他的方式能实现上述过程也行,谢谢各位啦。
祝大家新的一年里工作学习都有更大的成绩!
已解决! 转到解答。
又想了一下,要是把原始文件拆分成12个小文件,命名为A1,A2,A3,B1……D3,再存储,然后在通过对话框选择文件读取呢?如何通过循环实现上述的文件拆分呢?
不知道这两种方法哪种更好些?谢谢
基本上,在我看来,你遇到的问题就是一个如何读取文件的问题。而与所“程序结构设计”关联不是太大,你说呢?
按照我的理解,你现在遇到如下的文件格式,试图很灵活的读取用户指定的某部分数据段。
# A # B # C # D #
# A1 | A2 |A3 # B1 | B2 |B3 # C1 | C2 |C3 # D1 | D2 |D3 #
即,你希望用户首先选择A/B/C/D中的某个分段,然后再选择所对应的1/2/3子分段。
其实,就是一个如何读取文件的问题。只不过,你要用户一遍一遍不厌其烦的点击按钮而选择。其实,有两个下拉菜单控件是不是就够了呢?一个罗列A/B/C/D,一个罗列1/2/3,两个下拉的结果一汇总,便是12个小分段的某个。
其实ABCD以及123给定的就是一个文件读取索引,我们将ABCD123换成实际的文件读取offset就可以了。然后,读取长度是已知的,读取所需长度就可以了。具体操作如下:
1)如果每个子分段的长度是固定的,那么依靠就知道任意子分段的offset位置,使用用户给定的ABCD123换算成OFFSET。
2)打开文件,使用“设置文件指针位置”的函数(在文件\高级里边),然后,用Offset设置当前文件指针位置,再然后,使用文件数据读取函数(字符串或二进制),读取想要的长度就可以了。
3)你要理解的是,文件读取的原型函数为readfile(HFILE hmyfile, int offset, int length, int mode),不用管第一、四个参数,只要给定offset和length,就可以读到任意自己想要的数据,而所谓文件的结构,也不过就是给你一个计算offset和length的方法罢了,此例中,文件由12等大小子片组成,而ABCD123的两级结构也只是这些数据之间的一个逻辑关系罢了。子段长度固定,相当于length是已知的,而ABCD123一大堆的描述,也无非就是告诉你,如何通过他们算出offset。
=================================================
PS:两种方法都不是太好
第一个,操作太麻烦,两个下拉就好了。
第二个,“脱裤子放屁,多此一举”
如果你是在读取一个*.txt文件,而里面有至少是一个50×7容量的矩阵的话,这里有更简单的方法。可以直接读取文件,而在LabVIEW中获得一个double或者int32或者任意你想要的数据类型的二维数组。
试一试:
File IO\Read From Spreadsheet File.vi。很简单,一头连接路径,另一头二维数组就出来了。
速度真快啊,我去学习消化下,非常感谢您的热心指导!