f.cursor()

阅读(585) 标签: 文件, 创建游标, 自动关闭,

描述:

根据文件创建游标

语法:

f.cursor()

f.cursor(Fi:type,…;k:n,s)

备注:

根据文件f创建游标并返回,数据扫描完将自动关闭游标。

参数:

f

文件对象,仅支持文本文件对象

Fi

读出的字段,缺省读出所有,#时表示用序号定位

type

字段类型,包括:boolintlongfloatdecimalstringdatetimedatetime,缺省使用第一行数据类型。

s

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

k

分段号

n

总段数。kn都省略时表示读全文件。

选项:

@t

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

@b

export出的二进制文件中读,支持参数Fikn,不支持参数types,忽略选项@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内容以斜杠分隔,按照指定字段DeptManager读出

 

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()

EMPLOYEE1.txt内容以逗号分隔,取字段GENDER,并读取第一段数据。

 

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()

Dep3.txt文件内容:

返回结果:

 

22

=file("D:/Dep1.txt").cursor@k()

=A22.fetch()

保留数据项两端的空白符

 

 

23

=file("D:/Department1.txt").cursor@t(id:int,name;,"|")

=A23.fetch()

返回Department1.txt中的字段idname

 

24

=file("D:/Department1.txt").cursor@td(id:int,name;,"|")

=A24.fetch()

行内有数据不匹配类型时删除该行,对比B23的结果,可以看到ida的行被删除

 

25

=file("D:/Department1.txt").cursor@tv(id:int,name;,"|")

=A25.fetch()

检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容,对比B23的结果,可以看到ida的行类型不匹配。

 

26

=file("D:/Dep2.txt").cursor@tdn(id:int,name,surname;,"|")

=A26.fetch()

Dep2.txt文件内容:

68行列数与第一行不匹配,故忽略

相关概念:

cs.fetch()

cs.skip()

db.cursor()