第4章数组簇与字符串.docx
- 文档编号:8047714
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:21
- 大小:1.53MB
第4章数组簇与字符串.docx
《第4章数组簇与字符串.docx》由会员分享,可在线阅读,更多相关《第4章数组簇与字符串.docx(21页珍藏版)》请在冰豆网上搜索。
第4章数组簇与字符串
第4章 数组、簇和字符串
这一章介绍LabVIEW的几种数据类型,数组、簇和字符串。
这些数据类型都是一些数据成员的集合。
数组是相同类型数据成员的集合,簇是不同类型数据成员的集合,字符串是ASCII码字符的集合。
4.1数组
4.1.1数组概念
数组是相同类型数据成员的集合,这些成员可以同是数值型的、布尔型的、字符型的等各种类型,也可以是簇,但是不能是数组。
这些成员必须同时都是控制件或同时都是显示件。
数组可以是一维的,也可以是多维的。
每一维可以多达231-1个成员(21亿)。
一维数组是一行或一列数据,可以描绘平面上的一条曲线。
二维数组由若干行和列数据组成,可以在一个平面上描绘多条曲线。
三维数组由若干页组成,每一页是一个二维数组。
图4-1是两个数组的例子。
行索引
012
图4-1数组示例
对数组成员的访问是通过数组索引进行的,索引值的范围是0~n-1,n是数组成员的数目。
每一个数组成员有一个唯一的索引值,数组索引值从0开始,例如图4-1中二维数组里的数值0.8的行索引值RowIndex是1,列索引值ColumnIndex是2。
4.1.2创建数组
1.在前面板上创建数组
图4-2是在前面板上创建数组的步骤。
先在Array&Cluster控件子模板中选择数组壳放到前面板上,然后根据需要的数据类型选择一个控件放在数组壳内。
可以直接从控件模板中选择控件放进数组壳内,也可以把前面板上已有的控件拖进数组壳内。
这个数组的数据类型以及它是控制件还是显示件完全取决于放入的控件。
图4-2中放了一个数值型控制件,因此这是一个数值型控制件一维数组。
数据
图4-2在前面板上创建数组
(a)(b)(c)
图4-3增加数组成员
如果需要创建一个多维数组,把定位工具放在数组索引框任意一角轻微移动,当光标形状变成图4-3(a)下方的网状折角时,向上或下拖动鼠标增加索引框数量就可以增加数组的维数。
或者在索引框上弹出菜单选AddDimension。
图4-3(b)已经变为二维数组。
两个索引框上一个是行索引下一个是列索引。
网状折角光标放在数组索引框左侧时不仅可以上下拖动增加索引框数量,还可以向左拖动扩大索引框面积。
网状折角光标形状在鼠标开始拖动后,会变为图4-3(b)下方的所示的双折角形状,即定位工具常用的光标形状。
如果要减少数组维数,只要用定位工具减少索引框数量即可,也可以用弹出菜单的方法,选RemoveDimension。
要改变各个数组成员的显示区域大小,把定位工具放到任意一个数组成员的显示区域任意一角,当光标为常用形状时,拖动鼠标即可。
如图4-3(b)所示。
刚刚创建的数组只显示一个成员,如果需要显示更多的数组成员,把定位工具放在数组数据显示区任意一角,当光标形状变成图4-3(c)下方的网状折角时,向任意方向拖动增加数组成员数量就可以显示更多数据。
数组索引框中的数值是显示在左上角的数组成员的索引值。
2.在程序代码窗口中创建数组常量
在程序代码窗口中创建数组常量最一般的方法类似于在前面板上创建数组。
先从Array函数子模板中选择数组壳放到程序代码窗口中,然后根据需要选择一个数据常量放到空数组中。
图4-4选择了一个字符型常量,然后用标签工具给它赋值abc。
也可以把前面板上的数组控件拖动或拷贝到程序代码窗口中产生一个数组常量。
3.数组成员赋值
用上述方法创建的数组是空的,从外观上看数组成员都显示为灰色。
要根据需要用操作工具或定位工具为数组成员逐个赋值。
若隔过前面的成员为后面的成员赋值,则前面成员根据数据类型自动赋一个空值,例如0、F或空字符串。
数组赋值后,在赋值范围以外的成员显示仍然是灰色的。
图4-4在程序代码窗口中创建数组常量
4.其它的创建数组的方法
创建数组的方法还有:
●用数组函数创建数组
●某些VI的输出参数是数组
●用程序结构产生数组
这些方法将穿插在有关的内容中介绍。
4.1.3数组函数
图4-4的Array函数子模板中共有23个数组函数,这里按从左向右、从上到下的顺序逐一结合实例说明它们的用法。
1.数组大小函数ArraySize
图4-5数组大小函数的使用
图4-5是ArraySize函数应用示例,上面是程序代码,下面是前面板显示结果。
给ArraySize函数连接一维数组时,它返回一个数值10,表示数组有10个成员;给它连接二维数组时,它返回一个一维数组,前一个数值表示输入的二维数组有5行,后一个数值表示输入的二维数组有11列。
2.索引数组函数IndexArray
IndexArray函数刚放进程序代码窗口时只有一个index输入端口,连接到一维数组时,也仍然只有一个index输入端口,如图4-6(a)所示。
给这个端口连接一个索引值,element参数就输出该索引值对应的数据。
给IndexArray函数连接二维数组时,它的索引端口自动变为两个,上面一个是行索引index(row),下面一个是列索引disabledindex(col)。
列索引默认为不索引,所以端口形状为空心的。
假如给这个端口连接一个索引值,端口形状自动变为实心的。
连线完成后,那一个索引值不连线就自动成为空心的不索引状态。
行或列有一项不索引,那么从二维数组就只能索引出一维数组,相应的输出参数也变为subarray。
IndexArray函数允许多次索引,也就可以有多个输出参数。
图4-6(b)从一个二维数组常数分别索引出第4行,第3列,和属于第2行第3列的成员。
注意,索引值由0开始。
(a)(b)(c)
图4-6索引数组成员
图4-6(c)用IndexArray函数从一个三维数组索引出第2页和第2页中的第3行。
操作方法与从二维数组索引数据类似。
3.替换数组成员函数ReplaceArraySubset
图4-7替换数组成员
ReplaceArraySubset函数与IndexArray函数在为数组成员定位的方法上是完全一致的,但是它不是要索引出定位后的成员,而是用另外的数据替换它。
替换后的数组与原来的数组大小和数据类型是完全一致的。
图4-7用ReplaceArraySubset函数替换了原数组第2行和第3行第4列的成员,替换发生在图中椭圆框内的位置。
4.插入数组成员函数InsertIntoArray
这个函数与ReplaceArraySubset函数及其相似,差别只在于它为数组成员定位后不是替换它,而是在这个位置插入新的成员,输出的数组当然比原数组要大。
而且InsertIntoArray函数的index参数只能连接行列索引其中的一个。
图4-8插入数组成员
图4-8用InsertIntoArray函数在一个二维数组第3列的位置连续两次插入一列数据,椭圆中是插入的数据。
由于插入数据的类型与原数组类型不同,LabVIEW强制进行了数据类型转换。
5.删除数组成员函数DeleteFromArray
图4-9删除数组成员
DeleteFromArray函数用于删除数组中的某些成员,它的外形以及定位数组成员的方式与InsertIntoArray函数很相似。
在它的array输入参数下面是length参数,即删除长度。
这个参数如果不连接,默认值是1。
这时假如array参数输入一个二维数组,那么deletedportion参数输出是一个一维数组。
在图4-9中,length参数连接了2,所以deletedportion参数输出一个两行的二维数组。
DeleteFromArray函数的index参数也只能连接行列索引其中的一个。
在图4-9中数组常数椭圆中的部分被删除掉了。
可以看出,这也是分离数组成员的一种手段。
6.初始化数组函数InitializeArray和创建数组函数BuildArray
(a)(b)(c)(d)(e)
图4-10初始化数组与创建数组函数
InitializeArray函数可以建立一个所有成员全部相同的数组。
它刚放进程序代码窗口时只有一个dimensionsize参数,像其它许多函数一样,可以用定位工具或弹出菜单的方法,增加输入参数端口。
在图4-10(a)创建了一个有3行4列,所有成员都是a的字符常量数组。
相比之下BuildArray函数的功能就丰富多了。
在图4-10(b)中用它将单个数值建成一个只有一个成员的数组。
用这种方法还可以将一维数组建成只有一行的二维数组。
图4-10(c)中增加了它的输入参数端口,将两个数值建成一个一维数组。
只要输入参数端口的数量不超过数组最大维数的限制,可以将任意多个成员合成一个数组。
图4-10(d)的情形与图4-10(c)是类似的,它将两个一维数组合成二维数组。
但是BuildArray函数如果连接了两个以上维数相同的数组,在它的弹出菜单中就有一个选项ConcatenateInputs。
选中了这个选项两个一维数组就连接成一个长的一维数组,像图4-10(e)那样。
如果BuildArray函数的输入是一个一维数组和一些单个数值,ConcatenateInputs选项是默认选中并且不能修改的,所有数值自动追加到数组后面。
以上的功能可以推广到二维数组与二维数组连接和二维数组与一维数组连接的情况下。
7.提取子数组函数ArraySubset
图4-11提取子数组
ArraySubset函数从一个数组中提取出维数与它相等或比它少的一个数组。
它连接一个输入数组以后,输入端口对数就自动与输入数组维数适应。
每对端口上一个参数是定位提取子数组位置的索引值,下一个参数是提取子数组的长度。
图4-11从一个二维数组常量中提取出第2行以下的两行中的第3列以后的三列,如图中椭圆框内所示。
8.一维数组操作函数
以下是几个专门用于一维数组操作的函数。
(1)轮转一维数组Rotate1DArray
根据输入的轮转系数n重新排列一维数组成员。
图4-12(a)中的n=2,将数组最后两个成员3、4轮转到最前面;图4-12(b)中的n=-2,将数组前两个成员0、1轮转到数组最后面。
(a)(b)
图4-12轮转一维数组
(2)倒置一维数组Reverse1DArray
将一维数组所有成员顺序首尾颠倒,如图4-13(a)所示。
(3)查找一维数组Search1DArray
在一维数组中由startindex参数指定的位置开始寻找element参数指定的成员。
找到了就返回它的索引值,找不到返回-1。
如图4-13(b)所示。
(4)分离一维数组Split1DArray
将一维数组由index参数指定的位置开始分离为两个子数组。
如图4-13(c)所示。
(a)(b)(c)
图4-13转置、查找、分离一维数组
(5)一维数组排序Sort1DArray
将一维数组按升序排序,如图4-14(a)所示。
(a)(b)(c)
图4-14一维数组排序、插值、门限值
(6)一维数组插值Interpolate1DArray
如果fractionalindexorx参数是整数,就返回索引值与它相等的数组成员。
如果这个参数是分数,按它的整数部分在一维数组中定位,按它的分数部分在前后两个成员中插值。
图4-14(b)中,为fractionalindexorx参数连接的值是2.5,索引值2的成员是5,它后面是8。
8-5=3,3×0.5=1.5,5+1.5=6.5,所以返回值为6.5。
(7)一维数组门限值Threshold1DArray
这个函数有些像前一个函数的逆运算,它按照给定的门限值threshold在数组中找到它的分数索引值。
如图4-14(c)所示。
(8)插接一维数组函数Interleave1DArray
(a)(b)
图4-15一维数组插接与拆分
Interleave1DArray函数从输入的n个一维数组中依次取出单个数值,插接成一个新的一维数组。
新的数组长度等于l×n,l是输入数组中最短一个的长度。
从图4-15(a)中可以看到,第二个输入数组最后的6被甩掉了。
(9)拆分一维数组Decimate1DArray
Decimate1DArray函数与Interleave1DArray函数又是一对互逆运算。
Decimate1DArray函数从输入的一维数组中每隔n-1个数据取一个拆分出n个数组。
这个函数的输出端口数量n是可选的。
它输出数组的长度全一致,等于L÷n取整数。
L是输入数组的长度。
从图4-15(b)中可以看到,输入数组最后的0被甩掉了。
9.数组极值函数ArrayMax&Min
(a)(b)
图4-16数组极值函数
ArrayMax&Min函数从一个数组中找到最大值和最小值,以及它们的位置索引值。
如果有多个相同的极值就给出最前面一个索引值。
图4-16(a)连接的是一维数组,极值位置是单个数值;图4-15(b)连接的是二维数组,极值位置是一维数组,数组前一个值是行索引位置,后一个值是列索引位置。
10.转置二维数组函数Transpose2DArray
图4-17转置数组
Transpose2DArray函数把输入的二维数组的各行变为各列。
这是一个很简单,但是在图形显示、数据采集中很有用的函数。
11.重构数组函数ReshapeArray
(a)(b)(c)
图4-18重构数组
ReshapeArray函数采用输入数组的数据,根据输入的dimensionsize参数确定的维数,重新构建一个数组。
图4-18(a)用连接的一维数组的数据构建了一个4行3列的二维数组,数值不足时填补0。
图4-18(b)用连接的二维数组的数据构建了一个8个成员的一维数组,用不完的数据甩掉了。
图4-18(c)用连接的5行5列的二维数组的数据构建一个4行3列的二维数组,用不完的数据也甩掉了。
从图4-18(b)和图4-18(c)可以看出它采用原数组的数据是从第一行开始,顺序提取,用完前一行再用后一行。
4.2簇
4.2.1簇的概念
MATLAB中的cell矩阵
簇是一种数据类型,一个簇就是一个由若干不同数据类型的成员组成的集合体,类似于C语言中的结构体和Pascal语言中的记录。
可以把簇想象成一束通讯电缆线,电缆中每一根线就是簇中一个不同的数据元素。
使用簇可以为编程带来以下的便利。
1.把程序代码窗口中不同位置,不同数据类型的多个数据攒在一起,减少了连线的混乱。
2.子程序有多个不同数据类型的参数输入输出时,把它们攒成一个簇可以减少连接板上端口的数量。
3.某些控件和函数必须要簇这种数据类型的参数。
簇的成员可以是任意的数据类型,但是必须同时都是控制件或同时都是显示件。
簇的成员有一种逻辑上的顺序,这是由它们放进簇的先后顺序决定的,与它们在簇中摆放的位置无关。
前面的成员被删除时,后面的成员会递补。
改变簇成员逻辑顺序的方法是在簇上弹出菜单,选ReorderControlsInCluster…弹出一个对话框,依次为簇成员指定新的逻辑顺序。
4.2.2簇的创建
创建簇的方法与创建数组的方法极其相似。
1.在前面板上创建簇
图4-19是在前面板上创建簇的步骤。
先在Array&Cluster控件子模板中选择一个簇的空壳放到前面板上;然后根据需要放置的控件多少用定位工具调整簇的空壳的大小;从控件模板中取控件或从前面板上移动控件到簇的空壳中。
这个簇的数据类型以及它是控制件还是显示件全取决于放入的控件。
图4-19中放了一个数值型控制件,一个字符型控制件和一个布尔型控制件。
图4-19在前面板上创建簇
2.在程序代码窗口中创建簇常量
在程序代码窗口中创建簇常量最一般的方法类似于在前面板上创建数组。
先从Cluster函数子模板中选择簇的空壳放到程序代码窗口中,然后根据需要选择一些数据常量放到空簇中。
图4-20在程序代码窗口中创建簇常量
图4-20选择了一个数值型常量,一个字符型常量,一个布尔型常量。
也可以把前面板上的簇控件拖动或拷贝到程序代码窗口中产生一个簇常量。
只有数值型成员的簇边框是棕色的,其它是粉红色的。
3.簇成员赋值
用上述方法创建的簇常量,它的成员还没有有效的值,从外观上看都显示为灰色。
要根据需要用操作工具或定位工具为簇成员逐个赋值。
4.用簇函数创建簇
在下一节介绍。
4.2.3簇函数
1.解析簇函数Unbundle
Unbundle函数刚刚放进程序代码窗口时,有一个输入端口和两个输出端口。
如图4-21(a)所示。
可以用定位工具对端口进行缩放。
如图4-21(b)所示。
但是这似乎没有多大必要,因为它连接一个输入簇以后,端口数量就自动与簇的成员数一致了,而且不能再改变。
每个输出端口对应一个簇成员,端口上显示出这个成员的数据类型。
各个簇成员在端口上出现的顺序与它的逻辑顺序一致。
如图4-21(c)所示。
图4-21(d)是解析出来的簇成员。
连接几个输出是任意的。
(a)(b)(c)(d)
图4-21Unbundle函数
2.合成簇函数Bundle
(a)(b)(c)
图4-22Bundle函数
Bundle函数有两种基本用法,在图4-22(a)中,用这个函数将三个数据攒成一个簇。
Bundle函数的输入端口数量也是可以任意增减的。
在这种用法中,cluster参数没有连接数据。
在图4-22(b)中,用这个函数替换一个簇中的成员。
将原有的簇连接到cluster参数上,输入端口自动与这个簇的成员匹配。
此时希望替换哪个成员就把用做替换的数据连接到哪一个端口,如果用做替换的数据与原数据类型不符,就不允许连线。
在这里用一个双精度浮点数去替换整型数,虽然允许连线,但是输入数据被进行了强制转换。
图4-22(c)的用法实际上与图4-22(a)是一致的,只是输入参数中有一个是簇,输出的结果是由一个簇(椭圆中部分)、一个数值和一个字符串组成的簇。
如果需要向簇中追加成员,就得把簇解开,再和新成员一起攒成一个簇。
3.按名称解析簇成员函数UnblundleByName
UnblundleByName函数按指定的成员名称从簇中提取成员。
这个函数刚放进程序代码窗口中只有一个输出端口,当它的输入端口连接了一个簇,这个输出端口就就显示出簇中逻辑上第一个成员的名称。
LabVIEW的前面板控件一般都有一个默认的名称,但是许多常量没有默认名称。
如果簇中的成员没有名称,它就不会出现在输出端口中,这上时就要在它的标签中为它输入名称。
UnblundleByName函数的输出端口可以任意缩放,它允许多次解析同一个成员。
选择哪一个端口解析出哪一个成员的方法仍然是在端口上弹出菜单,选SelectItem,如图4-23所示。
图4-23按名称解析簇
4.按名称替换簇成员函数BundleByName
图4-24按名称替换簇成员
BundleByName函数只能按照簇中成员的名称替换簇中的成员。
这个函数放进程序代码窗口中只有一个输入端口,当它的cluster参数上连接了一个簇,输入端口就出现这个簇逻辑上第一个成员的名称。
希望替换哪个成员就在这个端口上弹出菜单选择哪个成员,并连接一个类型匹配的数据。
输入端口的数量也是可以改变的。
5.建立簇数组函数BuildClusterArray
BuildClusterArray函数只要求输入数据类型全一致,不管它们是什么数据类型,一律转换成簇,然后连成一个数组。
数组成员不能是数组,但是在图4-25中,3个一维数组被转成3个簇,然后建成一个数组。
这个数组有3个成员,每个成员都是一个簇,这个簇中只有一个一维数组。
4-25为插接,4-26为创建
图4-25建立簇数组函数
6.插接簇数组函数Index&BundleClusterArray
Index&BundleClusterArray函数从输入的n个一维数组中依次取值,相同索引值的数据被攒成一个簇,所有的簇构成一个一维数组。
插接成的簇数组长度与输入数组中长度最短的一个相等,长数组最后多余的数据被甩掉,如图4-26所示。
图4-26插接簇数组函数
7.簇和数组之间转换的函数ArrayToCluster和ClusterToArray
(a)(b)
图4-27簇与数组之间转换的函数
ArrayToCluster函数把输入的一维数组每个成员作为新建立的簇的一个成员。
默认的簇有9个成员,数组成员不足时补0。
如图4-27(a)所示。
ClusterToArray函数将输入簇的每个成员作为新建立的一维数组的一个成员,簇成员数据类型必须一致。
4.3字符串
4.3.1字符串的概念
字符串是一系列ASCII码字符的集合,这些字符可能是可显示的,也可能是不可显示的,例如换行符、制表位等。
程序中通常在以下情况用到字符串。
●传递文本信息。
●用ASCII码格式存储数据。
把数值型的数据作为ASCII文件存盘,必须先把它转换为字符串。
●与传统仪器的通信。
在仪器控制中,需要把数值型的数据作为字符串传递,然后再转化为数字。
4.3.2字符串控件
字符串出现在前面板上所用的控件一般只有String&Path控件子模板的StringControl、StringIndicator和List&Table控件子模板的Table。
有些控件虽然也可以输入字符串,但是它的数据类型实际上并不是字符型的,例如Listbox和TextRing等。
使用操作工具或标签工具可以在字符串控制件中输入或修改文本。
扩大字符串控制件和显示件的显示区域用定位工具拖动它的任意一角。
如果需要减少字符串控件在前面板上占的位置并能更多的显示字符,可以弹出菜单选VisibleItems>>Scrollbar命令。
对于StringControl和StringIndicator,此命令选项为灰色时,应先扩大字符串控件窗口的垂直尺寸。
字符串在StringControl和StringIndicator中的显示形式有以下几种。
●正常显示。
●“\”代码显示。
对非显示符号加“\”代码。
由于图4-28中的字符串LabVIEW后面敲了一个回车,所以“\”代码显示为LabVIEW\n。
其它“\”代码见表4-1。
●口令显示。
用“*”代替所有字符。
●
16进制显示。
用16进制数显示所有字符的ASCII码值。
在不同的显示形式之间切换通过弹出菜单进行,如图4-28所示。
图4-28字符的显示形式
表4-1LabVIEW的“\”代码
代码
释义
\b
前移一位
\f
表格转换
\n
换行
\r
回车
\t
制表位
\s
空格
\\
\
Table是一个字符串二维数组的表显示形式,它的每一个单元格显示一个字符串。
刚放进程序代码窗口的Table不全具备图4-29所示的显示项,可以在弹出菜单的VisibleItems选项中选择这些显示项。
单元格
图4-29Table
4.3.3字符串函数
LabVIEW提供了大量的字符串操作函数,这里选择编程中最常用的一些加以介绍。
图4-30字符串函数模板
(a)(b)(c)(d)
图4-31字符串操作函数
(一)
1.字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 字符串