LabVIEW数据记录和存储(一)—文本文件
扫描二维码
随时随地手机看文章
文本文件是由若干行字符构成的计算机文件,根据本文存储方式的不同有多种格式,如doc、txt、inf等。通常所指的文本文件是指能够被系统终端或者简单的文本编辑器中接受的格式,可以认为这种文件是通用的、跨平台的。对通用的英文文本文件而言,ASCII码是最为常见的编码标准;而如果需要存储带重音符号的英文或其它的非ASCII字符,则必须选择一种字符编码,如UTF-8。
尽管ASCII标准使得只含有ASCII字符的文本文件可以在Unix、Macintosh、Microsoft Windows、DOS和其它操作系统之间自由交互,但是在这些操作系统中,换行符并不相同,处理非ASCII字符的方式也不一致。换行(end-of-line, EOL)是一种加在文字字符最后位置的特殊字元,它可以确保后面的下一个字符能够出现在下一行。ASCII编码分别使用LF(Line Feed, 0Ah)或CR(Carriage Return, 0Dh)或CR+LF来表示换行(EOL),不同的操作系统处理EOL的方式如下:
LF:用于Unix或Unix相容系统(GNU/Linux, Mac OS X….),RISC OS;CR:Apple Ⅱ家族;CR+LF:Windows系统,大部分非Unix操作系统。LabVIEW中的文本文件读写采用图 1所示的两个函数完成:“Write To Text File”和“Read From Text File”。这两个函数是多态函数,可以接受File Refnum和File Path两种输入。
图 1 File I/O选板
本例将从一个数据读写的实例中介绍这两个函数的使用。如图 2所示,程序将一个二维数组转换为字符串后写入到文本文件中,将会自动生成该Test.xls文件(如果已经存在该名称的文件,将自动覆盖并不提示用户)。尽管例子的后缀名使用xls(Microsoft Excel格式),但是实质上是文本文件,使用各种文本编辑工具均可以打开(事实上也可以采用任何自定义格式的后缀名)。
图 2 Write to Text File
如果需要将现有的数据添加到原有的文本文件中,应该如何处理呢?如图 3所示,打开文件后使用Set File Position将文件指针移动到文件尾,再写入数据,并关闭文件。
图 3 Write to Text File_Append
对比图 2和图 3,可以看出,尽管都使用了Write To Text File函数,但是二者的输入是不一样的,前者使用路径而后者使用Refnum。此外,前者只使用了一个函数;而后者还加入了Close File函数。事实上,当使用文件路径(Path)直接连入(或者为空,此时将弹出路径选择对话框)到Write To Text File函数中时,LabVIEW将在执行完该函数时自动文件;但是如果是使用文件句柄(Refnum)连入到该函数或者将函数的输出句柄连接到了其它的函数,则LabVIEW将认为文件仍然在使用,并不自动关闭。
右击Write To Text File函数,在弹出菜单中有一个“Convert EOL”菜单项,默认是选中的。当勾选了该选项后,该函数将把所有基于操作系统的EOL字符(行结束符)转换为LabVIEW EOL符。比如会将单独的“”和“”转换成“”行结束符。
图 4显示了从Test.xls中读取数据的实例代码,使用Read from Text File函数能够将文本文件中的字符串读取,程序员可以对这些字符串进行后续的处理,如图中转化为Double数组。事实上,Read from Text File也能够接受路径和文件句柄两种输入方式,当需要只读取文件的部分字节时就需要使用到句柄操作了。
图 4 Read from Text File
Read from Text File函数有一个count输入,表示从文本文件中读取的字节数(byte),当设置为-1时表示整个文本。此外,在函数的右键快捷菜单中选择“Read Lines”将以行为单位(而不是字节)读取文本文件。Read from Text File函数同样也提供了“Convert EOL”选项,此时该函数将把所有基于平台的行结束符转换为换行符,如将“”和“”转换为“”。
【注意】
从Read from Text File函数的count端子可知,该端子为一个I32型整数。当将其它类型的整数连入到该端子时,将自动转换为I32型整数。如果文件过大,超过了I32的表示范围,需要分段读取。
【讨论】如何将一个文本文件的内容清空,但是不要将该文件删除呢?
这个问题似乎是程序员经常遇到的,一个简单的方式就是使用“Open/Create/Replace File”函数,将operation参数设置为replace and create。但是如果在使用文件的过程中,如何将文件内容清空呢?如图 5所示。
图 5 清空已写入文件的文本
当然可以先将该使用“Close File”函数关闭该文件,再使用“Open/Create/Replace File”函数新建该文件。此外,LabVIEW提供了一种字节控制的方式能够迅速地清空文件中的内容,如图 6所示。
图 6 使用Set File Size函数
毫无疑问,文本文件在数据存储方面是非常重要的。通用、简单和易用似乎是最大的优势,这一点从上面的实例中就可以看出来。但是,从测试测量的数据存储方面来说,它也有一些缺点。如读写速度比较慢慢,不适合于高速数据记录;文件取址和检索比较麻烦,无法实现快速定位;当数据量太大时,打开文本文件会非常慢。此外,文本文件无法存储颜色、富文本、图像和视频等多媒体信息。