首页 理论教育文件I/O操作VI和函数使用指南

文件I/O操作VI和函数使用指南

【摘要】:函数选板中文件I/O选板上的VI和函数可用于常见文件I/O操作,如读写以下类型的数据:在电子表格文本文件中读写数值;在文本文件中读写字符;从文本文件读取行;在二进制文件中读写数据。可将读取文本文件、写入文本文件函数配置为可执行常用文件I/O操作。如“文件I/O”VI和函数被设置为执行多项操作,则每次运行时都将打开关闭文件,所以尽量不要将它们放在循环中。下面对文件I/O选板中的节点进行介绍。

函数选板中文件I/O选板上的VI和函数可用于常见文件I/O操作,如读写以下类型的数据:在电子表格文本文件中读写数值;在文本文件中读写字符;从文本文件读取行;在二进制文件中读写数据。

可将读取文本文件、写入文本文件函数配置为可执行常用文件I/O操作。这些执行常用操作的VI和函数可打开文件或弹出提示对话框要求用户打开文件,执行读写操作后关闭文件,节省了编程时间。如“文件I/O”VI和函数被设置为执行多项操作,则每次运行时都将打开关闭文件,所以尽量不要将它们放在循环中。执行多项操作时可将函数设置为始终保持文件打开。

文件I/O选板如图8-4所示。

下面对文件I/O选板中的节点进行介绍。

1.写入电子表格文件

将字符串、数值的一维或二维数组转换为文本字符串并将其写入一个字节流文件中。输入一维或二维数据输入端的数据的类型决定了所调用的多态VI的实例。也可以将数组进行转置。在写入之前创建或打开一个文件,写入后关闭该文件。该VI调用数组至电子表格字符串转换函数转换数据。写入电子表格文件VI的节点图标及端口定义如图8-5所示。

978-7-111-40983-0-Chapter08-9.jpg

图8-4 文件I/O选板

978-7-111-40983-0-Chapter08-10.jpg

图8-5 写入电子表格文件VI

添加至文件?(新文件:F):如果输入为TRUE,VI将数据添加在已存在的文件后面。如果输入为FALSE(默认),VI使用数据替换已存在的文件。如果没有已经存在的文件,VI将创建一个新文件。

转置?(否:F):如果输入为TRUE,VI将其从字符串转换为数据后对其进行转置,默认为FALSE。

2.读取电子表格文件

从特定的数字文本文件中读取特定的行或列,并将其转换为数组。必须手动选择所要使用的多态VI实例。可以选择对数组进行转置。VI在读取之前先打开文件,在读取之后关闭文件。可以使用该VI读取以文本格式保存的电子表格文件。该VI调用电子表格字符串至数组转换函数来转换数据。读取电子表格文件VI的节点图标和端口定义如图8-6所示。

978-7-111-40983-0-Chapter08-11.jpg

图8-6 读取电子表格文件VI

行数:VI读取的最大行数。对与该VI,一行使用回车换行符或换行符隔开;或到了文件尾部。如果输入小于0,VI读取整个文件。默认为-1。

3.写入测量文件

写入测量文件ExpressVI用于将数据写入基于文本的测量文件(.lvm)、二进制测量文件(.tdm或.tdms)。写入测量文件ExpressVI的初始图标及端口定义如图8-7所示。

978-7-111-40983-0-Chapter08-12.jpg

图8-7 写入测量文件ExpressVI

将写入测量文件ExpressVI放到程序框图中时,会弹出配置写入测量文件窗口,如图8-8所示。

978-7-111-40983-0-Chapter08-13.jpg

图8-8 配置写入测量文件

下面对配置写入测量文件窗口中的选项进行介绍。

(1)文件名:显示被写入数据的文件的完整路径。仅在文件名输入端未连线时,该ExpressVI才将数据写入该参数所指定的文件。如文件名输入端已连线,则数据将被该ExpressVI写入该输入端所指定的文件。

(2)文件格式

文本(LVM):将文件格式设置为基于文本的测量文件(.lvm),并在文件名中设置文件扩展名为.lvm。

二进制(TDMS):将文件格式设置为二进制测量文件(.tdms),并在文件名中将文件扩展名设置为.tdms。如选择该选项,则不可使用分隔符部分,以及数据段首部分的无段首选项。

带XML头的二进制(TDM):将文件格式设置为二进制测量文件(.tdm),并在文件名中将文件扩展名设置为.tdm。如选择该选项,则不可使用分隔符部分,以及数据段首部分的无段首选项。

当选择该文件格式时,可勾选锁定文件以提高访问速度复选框。勾选该复选框可明显加快读写速度,但将影响对某些任务的多任务处理能力。通常情况下推荐使用该选项。

启用该选项后,当两个ExpressVI中的一个正在写一系列文件时,两个ExpressVI不能同时访问同一个文件。

(3)动作

保存至单个文件:将所有数据保存至一个文件。

提示用户选择文件:显示对话框,提示用户选择文件。

仅询问一次:提示用户选择文件,仅提示一次。只有勾选提示用户选择文件复选框时,该选项才可用。

每次循环时询问:每次ExpressVI运行时都提示用户选择文件。只有勾选提示用户选择文件复选框时,该选项才可用。

保存至一系列文件(多个文件):将数据保存至多个文件。如重置为TRUE,则VI将从序列中的第一个文件开始写入。当指定文件已经存在时将采取何种措施,由配置多文件设置对话框现有文件选项的值决定。如test_001.lvm被保存为test_004.lvm,则test_001.lvm可能已经被重命名、覆盖或者跳过。

设置:显示配置多文件设置对话框。只有勾选了保存至一系列文件(多个文件)复选框,才可使用该选项。

(4)如文件已存在

重命名现有文件:如重置为TRUE,则重命名现有文件。

使用下一可用文件名:如重置为TRUE,向文件名添加下一个顺序数字。例如,当test.lvm已存在时,LabVIEW将文件保存为test1.lvm。

添加至文件:将数据添加至文件。如选中添加至文件,VI将忽略重置的值。

覆盖文件:如重置为TRUE,将覆盖现有文件的数据。

(5)数据段首

每数据段一个段首:在被写入文件的每个数据段创建一个段首。适用于数据采样率因时间而改变、以不同采样率采集两个或两个以上信号、被记录的一组信号随时间而变化的情况。

仅一个段首:在被写入文件中仅创建一个段首。适用于以相同的恒定采集率采集同一组信号的情况。

无段首:不在被写入的文件中创建段首。

只有选择文件格式部分的文本(LVM)时,该选项才可用。

(6)X值列

每通道一列:为每个通道产生的时间数据创建单独的列。对于每列y轴的值,都会生成一列相应x轴的值。适用于采集率不恒定或采集不同类型信号的情况。

仅一列:仅为所有通道生成的时间数据创建一个列。仅包括一列x轴的值。适用于以相同的恒定采集率采集同一组信号的情况。

空时间列:为所有通道生成的时间数据创建一个空列。不包括x轴的数据。

只有选择了文件格式部分的文本(LVM)选项,才可使用该选项。

(7)分隔符

制表符:用制表符分隔文本文件中的字段。

逗号:用逗号分隔文本文件中的字段。

只有选择了文件格式部分的文本(LVM)选项,才可使用该选项。

(8)文件说明:包含.lvm、.tdm或.tdms文件的说明。LabVIEW将本文本框中输入的文本添加到文件的段首中。

高级:显示配置用户定义属性对话框。只有选择了二进制(TDMS)或带XML头的二进制(TDM),才可使用该选项。

4.读取测量文件

读取测量文件Express VI用于从基于文本的测量文件(.lvm)、二进制测量文件(.tdm或.tdms)中读取数据。如安装了Multisim 9.0或更高版本,也可使用该VI读取Multisim数据。读取测量文件Express VI的初始图标及端口定义如图8-9所示。

978-7-111-40983-0-Chapter08-14.jpg

图8-9 读取测量文件Express VI

将读取测量文件Express VI放到程序框图中时,会弹出配置读取测量文件窗口,如图8-10所示。

下面对配置读取测量文件窗口中的选项进行介绍。

(1)文件名:显示希望读取其数据的文件的完整路径。仅在文件名输入端未连线时,Express VI从参数所指定的文件读取数据。如文件名输入端已连线,则Express VI将从输入端所指定的文件读取数据。

(2)文件格式

文本(LVM):将文件格式设置为基于文本的测量文件(.lvm),并在文件名中设置文件扩展名为.lvm。

二进制(TDMS):将文件格式设置为二进制测量文件(.tdms),并在文件名中将文件扩展名设置为.tdms。

978-7-111-40983-0-Chapter08-15.jpg

图8-10 配置读取测量文件

带XML头的二进制(TDM):将文件格式设置为二进制测量文件(.tdm),并在文件名中将文件扩展名设置为.tdm。当选择该文件格式时,可勾选锁定文件以提高访问速度复选框。勾选该复选框可明显加快读写速度,但将影响对某些任务的多任务处理能力。通常情况下推荐使用该选项。

(3)动作

提示用户选择文件:显示文件对话框,提示用户选择一个文件。

(4)数据段大小

获取原始大小的数据段:按照信号数据段原来的大小从文件读取信号的数据段。

获取指定大小的数据段:按照采样中指定的大小从文件读取信号的数据段。

采样:指定在从文件读取的数据段中,希望包含的采样数量。默认值为100。只有选择获取指定大小的数据段时,该选项才可用。

(5)时间标识

相对于测量开始时间:显示数值对象从0起经过的小时、分钟及秒数。例如,十进制100等于相对时间1:40。

绝对(日期与时间):显示数值对象从格林尼治标准时间1904年1月1号零点至今经过的秒数。

(6)一般文本文件

读取一般文本文件:从一般文本文件读取数据。

数值数据起始行:表示数值数据的起始行。Express VI从该行开始读取数据。默认值为1。(www.chuimin.cn)

首行为通道名:指明位于数据文件第一行的是通道名。

首列为时间通道:指明位于数据文件的第一列的是每个通道的时间数据。

开始读取文件:将数据从文件名中指定的文件导入至采样数据表格。

采样数据:单击开始读文件按钮时,显示来自于文件名中指定文件的数据。

(7)分隔符

制表符:用制表符分隔文本文件中的字段。

逗号:用逗号分隔文本文件中的字段。

(8)小数点

.(点):使用点号作为小数点分隔符。

,(逗号):使用逗号作为小数点分隔符。

5.打开/创建/替换文件

使用编程方式或对话框的交互方式打开一个存在的文件、创建一个新文件或替换一个已存在的文件。可以选择使用对话框的提示或使用默认文件名。打开/创建/替换文件函数的节点图标和端口定义如图8-11所示。

978-7-111-40983-0-Chapter08-16.jpg

图8-11 打开/创建/替换文件函数

6.关闭文件

关闭一个引用句柄指定的打开的文件,并返回文件的路径及应用句柄。这个节点不管错误输入是否有错误信息输入,都要执行关闭文件的操作。所以,必须从错误输出中判断关闭文件操作是否成功。关闭文件函数的节点图标和端口定义如图8-12所示。关闭文件要进行下列操作:

(1)把文件写在缓冲区里的数据写入物理存储介质中。

(2)更新文件列表的信息,如大小、最后更新日期等。

(3)释放引用句柄。

978-7-111-40983-0-Chapter08-17.jpg

图8-12 关闭文件函数

7.格式化写入文件

将字符串、数值、路径或布尔型数据格式化为文本格式并写入文本文件中。格式化写入文件函数的节点图标和端口定义如图8-13所示。

978-7-111-40983-0-Chapter08-18.jpg

图8-13 格式化写入文件

使用鼠标左键在格式化写入文件节点图标上双击,或者在节点图标上右键弹出快捷菜单中选择编辑格式字符串,显示编辑格式字符串对话框,如图8-14所示。该对话框用于将数字转换为字符串。

978-7-111-40983-0-Chapter08-19.jpg

图8-14 编辑格式字符串对话框

该对话框包括以下部分:

当前格式顺序:表示将数字转换为字符串的已选操作格式。

添加新操作:将已选操作列表框中的一个操作添加到当前格式顺序列表框。

删除本操作:将选中的操作从当前格式顺序列表框中删除。

对应的格式字符串:显示已选格式顺序或格式操作的格式字符串。该选项显示为只读。

已选操作:列出可选的转换操作。

选项:指定以下格式化选项:

➢右侧调整:设置输出字符串为右侧调整或左侧调整。

➢用空格填充:设置以空格或零对输出字符串进行填充。

➢使用最小域宽:设置输出字符串的最小域宽。

➢使用指定精度:根据指定的精度将数字格式化。本选项仅在选中已选操作下拉菜单的格式化分数(12.345)、格式化科学计数法数字(1.234E1)或格式化分数/科学计数法数字(12.345)后才可用。

➢字符串:指定输出与文本框中输入的内容完全相同。该选项仅当在已选操作下拉列表中选择输出精确字符串(abc)后有效。

➢默认:指定用于分隔数字的整数及小数部分的符号。可选择系统默认、句号、逗号或自定义字符。该选项仅当在已选操作下拉列表中选择指定小数点符号后有效。

8.扫描文件

在一个文件的文本中扫描字符串、数值、路径和布尔数据,将文本转换成一种数据类型,并返回引用句柄的副本及按顺序输出扫描到的数据。可以使用该函数节点读取文件中的所有文本。但是使用该函数节点不能指定扫描的起始点。扫描文件函数的节点图标和端口定义如图8-15所示。

978-7-111-40983-0-Chapter08-20.jpg

图8-15 扫描文件函数

使用鼠标左键在扫描文件节点图标上双击,或者在节点图标上右键弹出快捷菜单中选择“编辑扫描字符串”,显示编辑扫描字符串对话框,如图8-16所示。该对话框用于指定将输入的字符串转换为输出参数的方式。

978-7-111-40983-0-Chapter08-21.jpg

图8-16 编辑扫描字符串对话框

该对话框包括以下部分:

当前扫描顺序:表示已选的将数字转换为字符串的扫描操作。

已选操作:列出可选的转换操作。

添加新操作:将已选操作列表框中的一个操作添加到当前扫描顺序列表框。

删除本操作:将选中的操作从当前扫描顺序列表框中删除。

使用固定域宽:设置输出参数的固定域宽。

对应的扫描字符创:显示已选扫描顺序或格式操作的格式字符串。该选项显示为只读。

9.写入文本文件

以字母的形式将一个字符串或行的形式将一个字符串数组写入文件。如果将文件地址连接到对话框窗口输入端,在写之前VI将打开或创建或一个文件,或者替换已有的文件。如果将引用句柄连接到文件输入端,将从当前文件位置开始写入内容。写入文本文件函数的节点图标及端口定义如图8-17所示。

978-7-111-40983-0-Chapter08-22.jpg

图8-17 写入文本文件函数

对话框窗口:在对话框窗口中显示的提示。

文件:文件路径输入。可以直接在“对话框窗口”端口中输入一个文件路径和文件名,如果文件是已经存在的,则打开这个文件,如果输入的文件不存在,则创建这个新文件。如果对话框窗口端口的值为空或非法的路径,则调用对话框窗口,通过对话框来选择或输入文件。

10.读取文本文件

从一个字节流文件中读取指定数目的字符或行。默认情况下读取文本文件函数读取文本文件中所有的字符。将一个整数输入到计数输入端,指定从文本文件中读取以第一个字符为起始的多少个字符。在图标的右键弹出快捷菜单中选择“读取行”,计数输入端输入的数字是所要读取的以第一行为起始的行数。如果计数输入端输入的值为-1,将读取文本文件中所有的字符和行。读取文本文件函数的节点图标和端口定义如图8-18所示。

978-7-111-40983-0-Chapter08-23.jpg

图8-18 读取文本文件函数

11.写入二进制文件

将二进制数据写入一个新文件或追加到一个已存在的文件。如果连接到文件输入端的是一个路径,函数将在写入之前打开或创建文件,或者替换已存在的文件。如果将引用句柄连接到文件输入端,将从当前文件位置开始追加写入内容。写入二进制文件函数的节点图标及端口定义如图8-19所示。

978-7-111-40983-0-Chapter08-24.jpg

图8-19 写入二进制文件函数

12.读取二进制文件

从一个文件中读取二进制数据并从数据输出端返回这些数据。数据怎样被读取取决于指定文件的格式。读取二进制文件函数的节点图标和端口定义如图8-20所示。

978-7-111-40983-0-Chapter08-25.jpg

图8-20 读取二进制文件函数

数据类型:函数从二进制文件中读取数据所使用的数据类型。函数从当前文件位置开始以选择的数据类型来翻译数据。如果数据类型是一个数组、字符串或包含数组和字符串的簇,那么函数将认为每一该数据实例包含大小信息。如果数据实例中不包含大小信息,那么函数将曲解这些数据。如果LabVIEW发现数据与数据类型不匹配,它将数据置为默认数据类型并返回一个错误。

13.创建路径

创建路径节点用于在一个已经存在的基路径后添加一个字符串输入,构成一个新的路径名。创建路径的节点图标及端口定义如图8-21所示。

在实际应用中,可以把基路径设置为工作目录,每次存取文件时就不用在路径输入控件中输入很长的一个目录名,而只需输入相对路径或文件名。

14.拆分路径

拆分路径节点用于把输入路径从最后一个反斜杠的位置分成两部分,分别从拆分的路径输出端和名称输出端口输出。因为一个路径的后面常常是一个文件名,所以这个节点可以用来把文件名从路径中分离出来。如果要写一个文件重命名的VI,就可以使用这个节点。拆分路径函数的节点图标和端口定义如图8-22所示。

978-7-111-40983-0-Chapter08-26.jpg

图8-21 创建路径的节点

978-7-111-40983-0-Chapter08-27.jpg

图8-22 拆分路径节点