run()

阅读(4562) 标签: run,

本章介绍run()函数的多种用法。

r.run(xi,…)

描述:

针对记录计算表达式,返回记录本身。

语法:

r.run(xi,…)

备注:

针对记录r计算表达式x,最后返回记录r。此函数通常用于修改r的字段值,例如xcol1=col2+1, 结果将更改col1的字段值。

参数:

r

记录。

xi

计算表达式,一般为字段名,或者由字段名组成的合法表达式,"~"表示当前记录。

返回值:

经过表达式x运算后的r

示例:

 

A

 

1

=[[12,23]].new(~(1):col1,~(2):col2)

 

2

=A1(1).run(col1=col2+1)

3

=A1(1).run(col1=col2+1,col2=col1+col2)

注意:

r.(x)r.run(x)的区别:r.(x)的目的在于计算x表达式的值,并返回该表达式的值;r.run(x)的目的在于通过x的运算对r做出修改,从而返回修改后的r

相关概念:

A.run(x1,x2, ......xi)

P.run(xi:Fi,…)

P.run(xi:Fi,…)

描述:

针对排列中每条记录计算表达式。

语法:

P.run(xi:Fi,…)

备注:

针对排列/序表中每条记录计算表达式xi,结果赋给Fi,返回修改后的P。在表达式计算过程中,如果需要引用P的当前成员,直接使用"~"表示。

参数:

P

序表/排列。

xi

Fi的字段新值。

Fi

A的字段名。

返回值:

序表

示例:

 

A

 

1

=demo.query("select DEPT,NAME,BIRTHDAY from EMPLOYEE")

2

=A1.derive(age(BIRTHDAY):Age)

3

=A2.run(Age+10:Age)

相关概念:

r.run()

A.run(x1,x2, ......xi)

A.run(x1,x2,......xi)

描述:

针对序列/排列中每个成员计算表达式,返回原序列。

语法:

A.run(x)

仅计算一个表达式。

A.run(x1,x2, ......xi)

计算多个表达式。

备注:

针对序列/排列A中每个成员计算表达式xi,计算过程中可能对A修改,最后返回修改后的A。例如xcol1=col2+1,结果将修改col1字段值。

参数:

A

序列/排列。

x

计算表达式,一般为字段名,或者由字段名组成的合法表达式,可使用"~"引用当前记录。

选项:

@m

数据量大的复杂运算中并行计算提升性能,计算次序不确定。

@z

逆向计算,仅适用于非纯序列。

返回值:

序列/排列

示例:

利用 "run" 修改成员值:

 

A

 

1

=[1,2,3,4,5]

 

2

=A1.run(~=~*~)

[1,4,9,16,25]"~"引用当前成员

利用 " run"函数实现EIDNAME的转换:

 

A

 

1

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

 

2

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

3

=A2.run(MANAGER=A1.select@1(EID==A2.MANAGER).NAME)

4

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

 

5

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

 

6

=A5.run@m(MANAGER=A4.select@1(EID==A5.MANAGER).NAME)

 

数据量大的运算中提升性能。

利用 "run" 函数实现表间关联:

 

A

 

1

=demo.query("select * from EMPLOYEE").keys(EID)

 

2

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

 

3

=A2.run(MANAGER=A1.select@1(EID== A2.MANAGER))

4

=A2.MANAGER.STATE

California,字段值为记录时,可用点操作符逐级引用。

逆向计算:

 

A

 

1

=[1,2,3].run(~=iterate(~~+~))

[1,3,6]

2

=[1,2,3].run@z(~=iterate(~~+~))

使用@z选项,逆向计算,返回结果:[3,5,6]

 

注意:

A.(x)A.run(x)的区别:

A.(x)的目的在于计算x表达式的值,并返回该表达式的值组成的序列;

A.run(x)的目的在于通过x的运算对A做出修改,从而返回修改后的序列/排列A

相关概念:

r.run()

P.run(xi:Fi,…)

ch.run()

描述:

管道中附加计算,给管道字段赋值后返回原管道。

语法:

ch.run (xi:Fi,…)

备注:

管道ch附加计算,对每条记录计算表达式xixi值赋给ch的字段Fi,返回原管道ch

该函数属于附加计算动作

参数:

ch

管道。

xi

表达式

Fi

ch的字段名。

返回值:

管道

示例:

 

A

 

1

=demo.cursor("select * from EMPLOYEE")

 

2

=channel()

创建管道。

3

=A2.run(SALARY+1000:SALARY)

管道附加计算,将SALARY+1000的计算结果赋给SALARY,返回原管道。

4

=A2.fetch()

A2管道执行结果集函数,保留管道当前数据。

5

=A1.push(A2)

将游标A1中的数据推送到管道,此时数据不会立即被推送到管道。

6

=A1.fetch()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

7

=A2.result()

获取管道计算结果:

cs.run()

描述:

游标中附加计算,给游标字段赋值后返回原游标。

语法:

cs.run (xi:Fi,…)

备注:

游标cs中附加计算,对每条记录计算表达式xixi值赋给cs的字段Fi,返回原游标cs。支持多路游标。

该函数属于延迟计算函数。

参数:

cs

游标。

xi

表达式。

Fi

cs的字段名。

返回值:

游标

示例:

 

A

 

1

=connect("demo").cursor("select EID,NAME,SALARY,HIREDATE,0 as SUBSIDY from EMPLOYEE ")

返回游标,数据内容如下:

2

=A1.run(age(HIREDATE):HIREDATE)

A1游标中附加计算,将age(HIREDATE)的结果值赋给HIREDATE,返回A1游标。

3

=A1.run((HIREDATE * 2 * SALARY):SUBSIDY)

A1游标中附加计算,将HIREDATE * 2 * SALARY的结果值赋给SUBSIDY,返回A1游标。

4

=A1.fetch()

读取A1游标执行A2A3计算后的数据(数据量较大时建议分批读取):

 

T.run ()

描述:

虚表中定义字段赋值操作后返回新虚表

语法:

T.run (xi:Fi,…)

备注:

虚表T中定义计算,对T计算表达式xi,结果赋给T的字段Fi,返回新虚表。

参数:

T

虚表。

xi

表达式。

Fi

T的字段名。

返回值:

虚表

示例:

 

A

 

1

=create(file).record(["emp.ctx"])

emp.ctx组表内容如下;

2

=pseudo(A1)

生成虚表对象。

3

=A2.run(SALARY+1000:SALARY)

A2虚表中定义计算,计算虚表的字段SALARY 增加1000的结果,然后再将结果赋给字段SALARY,返回新虚表。

4

=A3.import()

读取A3虚表中的数据,此时A2虚表执行A3中定义的计算,返回内容如下:

5

=A2.run(if(GENDER=="F",1,2):GENDER)

A2虚表中定义计算,计算虚表的字段GENDER,如果字段值为F则返回1否则返回2,然后再将结果赋给字段GENDER,返回新虚表。

6

=A5.import()

读取A5虚表中的数据,此时A2虚表执行A5中定义的计算,返回内容如下: