描述:
根据文件创建游标
语法:
f.cursor() |
f.cursor(Fi:type,…;k:n,s) |
备注:
根据文件f创建游标并返回,数据扫描完将自动关闭游标。
参数:
f |
文件对象,仅支持文本文件对象 |
Fi |
读出的字段,缺省读出所有,用#时表示用序号定位 |
type |
字段类型,包括:bool、int、long、float、decimal、string、date、time和datetime,缺省使用第一行数据类型。 |
s |
自选分隔符,缺省默认分隔符是tab。省略参数s时,s前边的逗号可以省略。 |
k |
分段号 |
n |
总段数。k和n都省略时表示读全文件。 |
选项:
@t |
f中第一行记录作为字段名,不使用本选项时默认使用_1,_2,…作为字段名 |
|
@b |
从export出的二进制文件中读,支持参数Fi、k和n,不支持参数type和s,忽略选项@t@s@i@q@m。记录数少的文件在分段读取时可能会有空段。 |
|
@e |
Fi在文件中不存在时将生成null,缺省将报错。 |
|
@x |
关闭时自动删除文件 |
|
@s |
不拆分字段,读成游标,游标内容为单字段串构成的序表,忽略参数 |
|
@i |
结果集只有1列时返回的游标内容为序列 |
|
@q |
如果字段串外有引号则先剥离,包括标题部分,并处理转义。 |
|
@c |
无s时用逗号分隔。如果同时有s则用s分隔。 |
|
@m |
f.cursor@m(Fi:type,…;n,s),返回成多路游标,n表示路数,缺省使用设计器中设置的最大并行数作为路数。 |
|
@o |
用引号作为转义符 |
|
@k |
保留数据项两端的空白符,缺省将自动做trim |
|
@d |
行内有数据不匹配类型和格式时删除该行,此时会按type检查类型 |
|
@n |
列数和第一行不匹配也作为错误处理,将被抛弃 |
|
@v |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容 |
|
返回值:
游标
示例:
|
A |
B |
C |
|
|
|||
1 |
=file("D://Student.txt").cursor@tx() |
返回取数游标,将第一行记录作为字段名,并且关闭游标时自动删除文件 |
|
|||||
2 |
=create(CLASS,STUDENTID,SUBJECT,SCORE) |
构造新序表 |
|
|||||
3 |
for |
|
|
|
||||
4 |
|
if A3==1 |
=A1.skip(5) |
当循环序号为1时,连跳5行 |
|
|||
5 |
|
=A1.fetch(3) |
从游标A1取数,每次取3条 |
|
||||
6 |
|
if B5==null |
当B5为空时跳出循环 |
|
||||
7 |
|
|
break |
|
|
|||
8 |
|
else |
|
|
|
|||
9 |
|
|
>A2.insert(0:B5, CLASS,STUDENTID,SUBJECT,SCORE) |
把B5记录插入到A2中 |
|
|||
10 |
=file("D://Department.txt").cursor@t(Dept,Manager;,"/") |
=A10.fetch() |
Department.txt文件内容: Department.txt内容以斜杠分隔,按照指定字段Dept和Manager读出 |
|
||||
11 |
=file("D://Department5.txt").cursor@t(;1:2) |
=A11.fetch() |
省略选出字段和分隔符,将游标分成2段,读取第1段的数据 |
|
||||
12 |
=file("D://EMPLOYEE.btx").cursor@b(GENDER;1:2) |
=A12.fetch() |
读取通过f.export@z()导出的集文件(即分段二进制文件)EMPLOYEE.btx中的字段GENDER,使用f.export@z()导出的二进制文件EMPLOYEE.btx缺省包含字段名。 |
|
||||
13 |
=file("D://EMPLOYEE1.btx").cursor@b(;1:2) |
=A13.fetch() |
读取f.export@b()导出的二进制文件EMPLOYEE1.btx,并且将文件内容分成2份,取第1份 |
|
||||
14 |
=file("D:\//Department.txt").cursor@ts() |
=A14.fetch() |
不拆分字段,游标内容为单字段串构成的序表: |
|
||||
15 |
=file("D://StuName.txt").cursor@i() |
=A15.fetch() |
StuName.txt为单字段文件,游标内容为序列 |
|
||||
16 |
=file("D://EMPLOYEE1.txt").cursor@tc() |
=A16.fetch() |
|
|
||||
17 |
=file("D://Department3.txt").cursor@e(EID) |
=A17.fetch() |
Department3.txt文件中没有字段EID,结果返回空,若不使用@e选项,则会报错,报错信息为:EID: field is not found。 |
|
||||
18 |
=file("D://Department2.txt").cursor@tq(;,"|") |
=A18.fetch() |
Department2.txt中内容如下 B19结果如下 |
|
||||
19 |
=file("D://Department.txt").cursor@tm(DEPT:string,MANAGER:int;3,"/") |
|
将游标分为3段,A19返回成多路游标 |
|
||||
20 |
=file("D://Sale1.txt").cursor(#1,#3) |
=A20.fetch() |
Sale1.txt内容如下: B20的结果如下 |
|
||||
21 |
=file("D:/Dep3.txt").cursor@qo() |
=A21.fetch() |
返回结果: |
|
||||
22 |
=file("D:/Dep1.txt").cursor@k() |
=A22.fetch() |
保留数据项两端的空白符
|
|
||||
23 |
=file("D:/Department1.txt").cursor@t(id:int,name;,"|") |
=A23.fetch() |
返回Department1.txt中的字段id与name |
|
||||
24 |
=file("D:/Department1.txt").cursor@td(id:int,name;,"|") |
=A24.fetch() |
行内有数据不匹配类型时删除该行,对比B23的结果,可以看到id为a的行被删除 |
|
||||
25 |
=file("D:/Department1.txt").cursor@tv(id:int,name;,"|") |
=A25.fetch() |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容,对比B23的结果,可以看到id为a的行类型不匹配。 |
|
||||
26 |
=file("D:/Dep2.txt").cursor@tdn(id:int,name,surname;,"|") |
=A26.fetch() |
Dep2.txt文件内容: 第6、8行列数与第一行不匹配,故忽略 |
|||||
相关概念: