iselect()

阅读(1073) 标签: 有序文件, 创建游标,

本章节介绍iselect()函数的用法。

f.iselect()

描述:

根据有序文件创建游标返回

语法:

f.iselect(A,x;Fi,…;s)

从字段/表达式x有序的文件f中读出x在序列A中的记录返回成游标

f.iselect(a:b,x;Fi,…;s)

从字段/表达式x有序的文件f中读出x[a,b]区间的记录返回成游标

备注:

从对字段x有序的文件f中读出x在序列A或者区间[a:b]中的记录,返回成游标。缺省认为x的值在f中唯一。

参数:

f

文件对象

A

单值或序列

a

字段值

b

字段值

x

字段名/表达式#时表示用序号定位

Fi

读出的字段,缺省读出所有

s

自选分隔符,缺省默认分隔符是tab。省略参数s时,s前边的分号可以省略。

选项:

@t

f第一行记录作为字段名,不使用本选项时默认使用_1_2,…作为字段名

@b

读取export出的二进制文件,支持参数AxFi,不支持参数s,忽略选项@t @c。记录数少的文件在分段读取时可能会有空段,不分段文件读取时会报错。

@c

s时用逗号分隔如果同时有s则用s分隔。

@r

x不唯一,缺省认为xf中唯一

@q

如果字段串外有引号则先剥离,包括标题部分,并处理转义。

@o

用引号作为转义符

@k

保留数据项两端的空白符,缺省将自动做trim

@e

Fi在文件中不存在时将生成null,缺省将报错。

@d

 

行内有数据不匹配类型和格式时删除该行,此时会按type检查类型

@v

 

检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容

@n

 

列数和第一行不匹配也作为错误处理,将被抛弃

返回值:

游标

示例:

 

A

 

1

=to(1:10)

 

2

=file("E:/files/employee.txt").iselect(A1,#1;;"|")

employee.txt内容如下

第一列有序且以"|"分隔。省略指定字段,读出文件中第一列值与A1序列中相同的所有字段,返回成游标。

3

=A2.fetch()

4

=file("E:/files/employee1.txt").iselect@t(A1,EID;EID,SALARY)

employee1.txt内容如下

读出文件中EIDA1序列中相同的EIDSALARY字段,返回成游标。

5

=A4.fetch()

6

=file("E:/files/employee2.txt").iselect@tc(A1,EID)

employee2.txt内容如下

文件内容以逗号分隔

7

=A6.fetch()

8

=file("E:/files/employee3.btx").iselect@b(A1,EID)

读取f.export@z(A,x:F,…;s)导出的集文件employee3.btx,取EID1-10的记录数据

9

=A8.fetch()

 

10

=file("E:/files/employee1.txt").iselect@t(1:10,EID;EID,SALARY)

读取EID区间值为110的记录,记录字段为EIDSALARY

11

=A10.fetch()

结果和A5一样

12

=file("D:/Sale2.txt").iselect@tr(7,ID;ID,ENAME)

Sale2.txt内容如下,读取出ID7的所有记录

13

=A12.fetch()

14

=file("D:/Department1.txt").iselect@t(1:5,id;id,name;"|").fetch()

15

=file("D:/Department1.txt").iselect@tk(2,id;id,name;"|").fetch()

使用@k选项保留数据项两端的空白符

16

=file("D:/Department1.txt").iselect@tq(1,id;id,name;"|").fetch()

剥离字符串外的引号

17

=file("D:/Department1.txt").iselect@tqo(5,id;id,name;"|").fetch()

18

=file("D:/emp1.txt").iselect@et(2:5,EID;EID,SALARY,SEX).fetch()

emp1.txt数据内容如下:

SEXtxt中不存在,使用@e选项使其返回空:

19

=file("D:/emp1.txt").iselect@tn(7:10,EID;EID,NAME,SALARY).fetch()

EID10的列与第一列列数不一致,故抛弃

20

=file("D:/emp2.txt ").iselect@t(A1,EID-5;;",").fetch()

选出1-10的,x表达式使EID5-15的数据都符合。

21

=file("D:/emp2.txt ").iselect@t(110,EID-5;;",").fetch()

同理,使用[a:b]区间结果同上