选项语法

阅读(12370) 标签: 函数, 选项, 语法,

本章节将介绍集算器函数中选项的使用。

集算器中的函数选项

集算器中,很多函数都可以使用函数选项。通过函数选项,同一个函数可以有不同的工作方式。函数选项的基本格式是f@o(…)o就是函数f的选项。如:

 

A

B

1

2004-5-5

2014-7-7

2

=interval(A1,B1)

 

3

=interval@y(A1,B1)

 

4

=interval@m(A1,B1)

 

我们可以用interval函数计算两个日期的间隔天数,而在A3A4的表达式中,@y@m就是interval函数的选项,有了选项后,函数计算时间间隔时,将分别以年和月为单位。使用函数选项,可以使得一个函数满足多种需要,在扩充了函数功能的同时,也避免了过多的函数名或者函数参数。A2,A3A4中,分别计算出两个日期的间隔天数,间隔年数和间隔月数如下:

   

常用函数选项

在集算器中,一些函数选项是比较常见的,可以使用在多个函数中。

Ø  @1@a

在定位、选出以及关联函数中,经常用到@1@a这两个选项,如A.pos(), A.select(), A.pmax(), A.pselect(), A.minp(), P.align()等。

使用@a选项,可以使默认返回第1个查询结果的函数,返回所有满足条件的结果。与@a相反,添加@1选项后,默认返回多个成员的函数,只会返回找到的第1个结果。

我们通过一些例子来了解一下@a@1选项的使用:

 

A

1

[1,2,3,4,3,2,1,2,3,2,1]

2

=A1.pos(2)

3

=A1.pos@a(2)

4

=A1.pselect(~==1)

5

=A1.pselect@a(~==1)

A2,A3,A4A5中的结果分别如下:

   

 

 

A

1

=demo.query("select * from CITIES")

2

=A1.select(left(NAME,1)=="C")

3

=A1.select@1(left(NAME,1)=="C")

4

=A2.align([6,35,40],STATEID)

5

=A2.align@a([6,35,40],STATEID)

A2中选出名称首字母为C的城市:

A3中找出第1个首字母为C的城市:

A4中找出州编号为6,3540的第1城市:

A5中找出所有州编号为6,3540城市,并将它们按所在州分组:

顺便说明一下,由于数字1与小写字母l不易区分,因此在集算器的选项中,大多数都是使用数字1

还需要了解的是,同样的选项,在不同的函数中可能代表不同的含义。如@a用在定位函数中表示返回全部,而用在写文件函数f.write()f.export()中时,表示追加

Ø  @z

在一些与顺序有关的排序、定位、选出等函数中,经常使用@z选项,如A.rank(), A.sort(), A.pos(), A.pselect(), A.select()等。

 

A

1

[1,2,3,4,3,2,1,2,3,2,1]

2

=A1.pos@z(2)

3

=A1.sort@z()

4

=demo.query("select * from CITIES")

5

=A4.select@z(STATEID:5)

使用@z选项后,在定位或选出时,在序列或序表中,会从后向前执行。因此,在例子中A2返回最后一个2的位置:

A3中返回从大到小排序的结果:

A5中获取的记录也是从后向前排的:

Ø  @b

在一些定位、选出等函数中,经常使用@b选项,如A.pos(), A.pselect(), A.select()等。使用@b选项时,会在查找时使用二分法,二分法具有更高的查找效率,但是要求A必须是有序的,否则有可能获得错误的结果。

 

A

1

=demo.query("select * from CITIES")

2

=A1.select@b(STATEID:5)

3

=A1.sort(STATEID)

4

=A3.select@b(STATEID:5)

由于A1中的数据并非按州代码排序的,因此A2中使用了@b选项后,用二分法只找到1条结果:

A3中对数据进行了排序,A4中才能获得正确的结果:

当在文件读写函数中用到@b,就是另外的情况了,如f.import(), f.export(), f.cursor()等。此时,说明读入或写出的是二进制文件。在集算器中,二进制文件称为集文件,扩展名通常为btx,它的存储空间更小,读写速度更快,使用集文件更有效率。

同时使用多个函数选项

集算器中,在需要时,可以同时使用多个允许共用的选项,选项之间没有次序。如:

 

A

1

[1,2,3,4,3,2,1,2,3,2,1]

2

=A1.pos@az(2)

3

=A1.pos@za(2)

4

=demo.query("select * from CITIES")

5

=A4.select@1z(STATEID:5)

A2A3中的结果是相同的,都是从A1中从后向前找出所有2的位置:

A5中,从后向前找出第1个州代码是5的城市:

需要注意的是,有些函数选项是互相冲突的,不能同时使用,如@a@1,或者f.import()的选项@t@b等。