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变量。

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