和所有编程语言一样,数据是以某种特定的形式存在的,而不同的数据之间往往还存在某些联系(如数组)。在Origin中,LabTalk的数据类型分为如下:
1、 Constant:常量
2、 Double:双精度浮点数
3、 Integer:整型
4、 Dataset:数组
5、 String :字符串
6、 StringArray:字符串数组
7、 Range :区域
8、 Tree :树结构
9、 Graphic Object:图形化对象
2.1 常量和字符常量
在LabTalk运行过程中,其值不能被改变的量称为常量。在LabTalk中主要是数字常量,如1,2,1.25 … PI,而不能定义字符串常量。声明一个数字常量方法如下:
>>const EM=0.5772157
习惯上,数字常量名用大写,变量名用小写,以示区别。使用数字常量的好处有:
1、 含义清楚。
2、 一改全改,使用方便。
>>const EM=1.0
在程序中所有以EM代表的就会全部自动改为1.0。
2.2 变量
和其高级语言一样,用来标识变量名,函数名,数组,文件名等等称为标识符,更为简单地说,就是一个名字。
LabTalk规定只能由字母,数字和下划线三种字符组成,且第一个字符必须为字母或下划线,例如:
_test,test4,test,TEST,test_,_1,_2,…
值得注意的是:
1、在LabTalk中,大写字母与小写字母是被认为是两个不同的字符。因此,test与TEST是不同的变量名。
2、在变量的使用过程中,不必“先定义,后使用”。这也就是说,即用即取!
2.3 变量的定义及赋值
1、双精度浮点数
定义方法:
double 变量名
或者
double 变量名=值
例如:
>>doubleFloat=0.5 //(定义双精度浮点数Float变量,=:将2.2赋给变量Float)
>>type“$(Float)” //(输入2.2,$(变量名):变量引用)
0.5
>>
或者
>>doubleFloat //(定义一个双精度浮点数Float变量,其值为NaN)
>>Float=0.5 //(将2.2赋给变量Float)
>>type “$(Float)”
0.5
>>
2、整型
定义方法:
int 变量名
或者
int 变量名=值
例如:
>>intinteg=1
>>type “$(integ)”
1
>>
或者
>>intinteg
>>integ=1
>>type “$(integ)”
1
>>
3、数组(一维数组)
定义方法:
dataset 数组名
或者
dataset 数组名={初始值:步长:终值}
例如:
>>datasetaa={1:0.2:10} //(定义数组aa,当步长缺省时,默认步长为:1)
>>type “$(aa[1])”
1
>>
或者
>>dataset aa
>>aa={1:0.2:10}
>>type “$(aa[1])”
1
>>
再或者
>>dataset aa
>>aa=data(1,10,0.2) //data(初始值,终值,步长)
>>type “$(aa[1])”
1
>>
在这里,我们要强调在Origin中,每一工作表中的每一列或每一行都是一个数组,因此,我们可以直接对每一列或每一行进行赋值。如:
>>col(1)={1:0.2:10}
或者
>>col(A)={1:0.2:10}
再或者
>>col(1)=data(1,10,0.2)
注意,在LabTalk中,列数是从左往右1、2、3、4、… ... n;然而一每不一定是按字母序号排列。
这里还介绍一下得到数组大小的方法,可用“数组名.GetSize()”来得到数组的大小(数组个数),如:
>>datasetaa={1:0.2:10}
>>type “$(aa.GetSize())”
46
>>
这种方法不能得到列的行数,但我们可以用另外的方法:wks.nrows。如:
>>col(1)=data(1,10,0.2)
>>type “$(wks.nrows)” //(这里,nrows改为ncols则是得到当前处于激活的Sheet的列数)
46
>>
4、字符串
在LabTalk中,声明一字符串变量必须以“$”符号结尾,这一点与大部分高级语言有所不同,如: Str$, test$... ....
定义方法:
string 变量名$
或者
string 变量名$=字符/“字符串”
再或者
%A = “字符串” //%(A(a)~Z(z)):定义字符串记录器
例如:
>>stringStr$
>>Str$=test/“test”
>>type “%(Str$)”
test
>>
或者
>>stringStr$= test/ “test”
>>type “%(Str$)”
test
>>
再或者
>>%A= “Helloworld”
>>type “%A”
Hello world
>>
5、字符串数组
定义方法:
stringarray 字符串数组名
或者
stringarray 字符串数组名={“字符串”,“ 字符串”}
例如:
>>stringarrayaa
>>aa={“test1”, “test2”}
>>type “%(aa.getat(1)$)”
test1
>>
或者
>> stringarrayaa={“test1”, “test2”}
>> type “%(aa.getat(1)$)”
test1
>>
在LabTalk中,操作字符串数组的方法还有很多,如add,append,copy,find,copyto,getsize等等,有兴趣的话,可以参考Origin中的help!
6、区域(块)
定义方法:
range 变量名
或者
range 变量名=[窗口名]层名!数据区
注意,range变量可用于工作表,矩阵和图型中。其对应的使用方法如下:
range rangeName = [BookName]SheetNameOrIndex!ColumnNameOrIndex[RowBegin:RowEnd]
range rangeName = [MatrixBookName]MatrixSheetNameOrIndex!MatrixObjectNameOrIndex
range rangeName =[GraphName]LayerNameOrIndex!DataPlotIndex
例如
>>range cc=[Book1]Sheet1!col(2)
>>range gg=[Graph1]layer2!2
>>range mm=[MBook1]MSheet1!2
>> range xx=[??]!tmpdata_a
通过这种变量我们可以在不激活窗口的情况,随时随地的访问数据。也这是说,在Origin中,有Book1,Book2,Book3,每个Book中只有一个Sheet且有三列,当前窗口为Book1,那么我们就可以使用range来访问Book2和Book3里面的数据。
7、树结构
顾名思义,树结构就是类似于树,它有树支和树叶,在这树结构中,数据的建立和访问都是按树支叶形式访问的。
定义方法:
tree 树名
或者
tree 树名=其它已定义树名
再或者
:= “字符串”
例如:
>>tree aa
>>aa.bb.ss=“This is a string”
>>aa.bb.cc= 1
>>type%(aa.bb.ss$)
This is a string
>>type$(aa.bb.cc)
1
>>
>>tree tr
>>tr.a=data(1,10)
>>dataset temp=tr.a
>>col(1)=temp //col(1)=tr.a 也可以
>>type $(tr.a[2])
2
>>
8、图形对象
图形对象,指的是从图形中获得图形元素及方法。
定义方法:
Gobject 变量名
或者
Gobject 变量名=[图像页]图像层!对象名
例如:
>>col(1)=data(1,10)
>>col(2)=col(1)
>>col(3)=sin(col(1))
>> plotxy iy:=(col(1),col(2):col(3)) plot:=200
>>Gobject myline=line1
>>draw –n myline –l {1,2,3,4}
>>win –tplot
>>myline.X+=2
2.4 变量作用范围
根据变量的作用范围,可以变量分为全部变量(Global)、会话变量(Session)和局部变量(Local)。一般情况,没有声明变量时(即用即取),这样得到的变量为全部变量;而用变量声明语句定义变量,则为会话变量;在{}符号内的变量则为局部变量。如下程序:
[Main]
double a=5; //定义Session 变量
type -b "Session Variables$(a)\n";
b=7; //定义Global变量
type -b "Global Variables$(b)\n";
loop(i,1,$(a)){
double a=10; //定义Local变量
type -b "LocalVariables $(a)";
}
有时,我们也可能为程序的可读性,希望在变量使用之前先定义,但又希望是全局变量。为此,就不得不使用系统变量:@global 来强制将Session变量变为Global变量。它有两个值0和1,表示是否将声明的变量作为全部变量,0表示否,1表示是。如下程序:
[Main]
@global=1;
double alpha=1.2;
double beta=2.3;
Function double myPeak(doublex,double x0){
doubley=10*exp(-(x-x0)^2/4);
return y;
}
@global=0;
double gamma=3.45;
在上例中,除了gamma 是Session变量,其它全是Global变量。