本章节介绍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出的二进制文件,支持参数A、x和Fi,不支持参数s,忽略选项@t @c。记录数少的文件在分段读取时可能会有空段,不分段文件读取时会报错。 |
@c |
无s时用逗号分隔。如果同时有s则用s分隔。 |
@r |
x不唯一,缺省认为x在f中唯一 |
@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内容如下 读出文件中EID与A1序列中相同的EID和SALARY字段,返回成游标。 |
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,取EID为1-10的记录数据 |
9 |
=A8.fetch() |
|
10 |
=file("E:/files/employee1.txt").iselect@t(1:10,EID;EID,SALARY) |
读取EID区间值为1到10的记录,记录字段为EID和SALARY |
11 |
=A10.fetch() |
结果和A5一样 |
12 |
=file("D:/Sale2.txt").iselect@tr(7,ID;ID,ENAME) |
Sale2.txt内容如下,读取出ID为7的所有记录 |
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数据内容如下: SEX在txt中不存在,使用@e选项使其返回空: |
19 |
=file("D:/emp1.txt").iselect@tn(7:10,EID;EID,NAME,SALARY).fetch() |
EID为10的列与第一列列数不一致,故抛弃 |
20 |
=file("D:/emp2.txt ").iselect@t(A1,EID-5;;",").fetch() |
选出1-10的,x表达式使EID在5-15的数据都符合。 |
21 |
=file("D:/emp2.txt ").iselect@t(1:10,EID-5;;",").fetch() |
同理,使用[a:b]区间结果同上 |