和所有編程語言一樣,數據是以某種特定的形式存在的,而不同的數據之間往往還存在某些聯繫(如數組)。在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變量。