读《我和Labview》3.5-3.6路径和数据平化
3.5路径
3.5.1路径数据
下图中的程序介绍了相对路径和执行系统命令vi的部分使用

路径是Labview特有的数据类型。文本语言一般直接用字符串来表示路径,但每种操作系统使用的路径分隔符都不相同。windows使用反斜杠"",
Linux使用正斜杠"/",Mac Os使用冒号":"。
Labview是跨平台的编程语言,使用了专门的数据来表示路径。
Labview路径数据包含的两种信息:
- 1.路径的种类,是相对路径还是绝对路径
- 2.字符串数组的形式来记录路径。数组元素按顺序记录下路径从根->分支每一级的名字。分隔符是显示路径时,根据不同系统添加上去的,解决跨平台以及程序部分可移植性问题
3.5.2相对路径
在所有程序使用路径时,应优先考虑使用相对路径,这样拷贝到另一台计算机,程序不至于还需要修改才能找到相应文件,这也是相对路径存在的意义。
如程序需要读写某一文件中的数据,可以把该文件放在程序主VI同一路径下,程序中使用该文件的相对路径。
这样每次程序运行,先调用 "当前 VI 路径" 常量,得到主 VI 的位置,再与记录的相对路径合成该数据文件的全路径。
示例1:读取data.txt文件中的数据。Open/Create/Replace Flie中Open在Labview中往往是读取的意思,打开是相对于程序而言,而不是对人机操作中的人,读取之后的数据可以下流进行其他操作

3.5.3路径常量
Labview函数选板->路径->路径常量

3.5.4路径与其他数据类型的转换
常见的五个与路径相关的转换函数:
- 1.最常用的:"路径至字符串转换" 和 "字符串至路径转换"
- 2.涉及路径本质的:"路径至字符串数组转换" 和 "字符串数组至路径转换"
- 3."引用句柄至路径转换":可以把“打开/创建/替换文件”中各函数输出的句柄转换为路径,还可以得到 TDMS 文件的路径
字符串与路径之间的转换是与操作系统相关的,因为不同操作系统使用的路径分隔符不同。上文介绍正则表达式时使用了一个示例是从一段路径中得到文件名,比如,从 "c:\temp\test.vi" 中提取 "test.vi"。如果是在 Windows 系统下,还可以使用下面的程序:

但是这个程序在 Linux 系统下是无法得到正确结果的,因为 Linux 不用 "" 作为路径分隔符。若考虑支持多操作系统,可能还是需要使用正则表达式匹配文件名
3.6数据平化
数据平化,也被称为数据序列化,是指把原本结构化的,有多个层次的数据,转换为单一层次的一段连续的数据,这主要是为了方便存储数据,以及通过网路传输数据。大多数简单数据类型、数值数组等的数据在内存中是以平化的方式存储的。换言之,"平化型数据结构"即它们的数据存储在一整块连续的内存中。
那些在内存中原本就是以平化方式存储的数据,才可以使用强制类型转换函数。强制类型转换函数默认的目标类型是字符串型,一般的简单数据类型(字符串和 U8 数组除外)强制转换成字符串等同于使用 "平化至字符串" 函数对数据平化。由于这些数据在内存中原本就是平化存储的,强制转换成字符串并未改变它们原来的任何数据,只是换用以字符串的形式把内存中的数据表示出来。
复杂的数据类型,强制类型转换成字符串与平化至字符串相比,会缺少一些数据类型的信息,而数据内容部分是相同的。比如把一个数值数组平化至字符串后,字符串内包含的信息有数组长度以及数组中的数据;而强制类型转换成字符串,字符串内只有数组数据的信息。
3.6.1数据平化至字符串
在Labview编写和运行程序时,不同数据以不同格式保存在内存中。
字符串数组的树状数据结构:在字符串数组中记录的是按顺序排列的每个元素字符串的句柄,句柄指向另外的某一块内存,那里才真正保存着字符串的内容。如下图的树状结构:

如果需要把所有的数据都保存至硬盘,或者需要把数据通过接口传递到其它计算机或硬件设备上(比如通过 TCP/IP 协议把一个字符串数组传递到其它电脑上、通过串口线把这个数据传递到外设上等),则必须把原本以链表、树状等表示的数据规整成一块连续的数据,再进行保存、传递。把一个数据转换成这种连续连贯的表达方式的过程,叫做 "平化"。比如,对字符串数组进行平化的结果是,其在内存中的树状结构变成了一块连续的平整内存。
- 编程->数值->数据操作->平化至字符串
可以把任何数据类型平化,不论它是否原本就是 "平" 的。它的输出结果是一个字符串,这个字符串表达的并非是一段有意义的文字,而是以字符串方式表达的一块连续内存中的数据。按字面是无法理解这个字符串数据的。
- "从字符串还原" 函数:回复为原来的数据类型
这个函数可以把任何数据类型平化,无论之前是不是平化型数据
3.6.2数据平化至XML
平化至XML是为了解决平化过后的数据无法理解信息的问题,在有些应用场合,需要人工直接打开一个数据文件进行阅读,或者直接监视传输过程中数据的内容。
XML的全称是可扩展标记语言(Extensible Markup Language)。它的特点是给文本加入了一些解释这些内容的标签。比如下面这行 XML 文本:
<data label="输入值" type="DBL">34.2</data>
上面代码作为演示,并不是Labview生成的
主题内容:34.2
标签名:data
起始标签:data
结束标签:/data
其他两个属性:
标题label和类型type,每个属性都有一个值,表明这个数据的标题是"输入值";类型是"DBL"
总体的意思表示给"34.2"加了一个名为"data"的标签,有两个属性:标题为"输入值",类型为"DBL"
"编程 -> 文件 I/O->XML->LabVIEW 模式 -> 平化至 XML"函数可以把任何一个类型的数据以 XML 文本的方式表达出来。“从 XML 还原”函数是其反过程。下图中的程序把一个数值平化成一段 XML 文本。

XML可扩展标记语言具有可被人和机器共同理解的特点,当在编程时考虑到需要把数据保存成文本文件,或者以文本文件传输时,可使用XML
3.6.3数据平化至JSON
在 XML 标准推出 6 年之后的 2002 年,一些 JavaScript 程序员设计了 JSON 数据格式,用于在某些应用中取代 XML。JSON 是 JavaScript Object Notation 的缩写。JSON 之后很快就被纳入了 ECMA (European Computer Manufacturers Association) 组织定制的 JavaScript 语言的标准。时至今日,JSON 的应用已经远比 XML 的应用更加广泛,几乎所有的编程语言都已经支持 JSON。
数值数据直接以文本的方式写出;字符串数据用双引号表示;数组用方括号表示;簇用花括号表示。

JSON 的效率高于 XML,在数据平化时应当尽量选择使用 JSON。不过目前 LabVIEW 对于 JSON 的支持似乎还不够好,有些数据无法被直接平化为 JSON 格式,在这种情况下就只能使用 XML 格式了。


浙公网安备 33010602011771号