LabTalk 編程第二章--數據類型

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章