f.cursor()

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

描述:

根据文件创建游标。

语法:

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。记录数少的文件在分段读取时可能会有空段。

@e

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

@x

关闭时自动删除文件,使用该选项返回的游标不能回转。

@s

不拆分字段,读成游标,游标内容为单字段串构成的序表,忽略参数。

@i

结果集只有1列时返回的游标内容为序列。

@q

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

@c

s缺省时用逗号分隔。

@m

f.cursor@m(Fi:type,;n,s),返回成多路游标,此处n表示路数,缺省使用设计器中设置的【多路游标缺省路数】值作为路数,第三方应用程序中集成使用时,缺省路数为raqsoftConfig.xml文件中配置的cursorParallelNum的值。

@o

用引号作为转义符。

@k

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

@d

行内有数据不匹配类型和格式时删除该行,此时会按type检查类型;@p@q时括号和引号不匹配时也删除该行。

@n

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

@v

@d@n检查出错时抛出违例,中断程序,输出出错行的内容。

@w

把每行读成序列,结果为序列的序列构成的游标,列名也算作一行。

@a

将单引号作为引号处理,缺省不处理,与@q组合使用时也是将单引号作为引号处理。

@p

解析时处理括号和引号匹配,括号内分隔符不算,同时引号外转义也处理。

@f

不做任何解析,简单用分隔符拆成串。

@l

允许续行,行尾是转义字符\

 

返回值:

游标/多路游标

示例:

 

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

 

=A21.fetch()

Dep3.txt文件内容:

使用@o选项,串中两个引号表示一个引号,返回结果:

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行列数与第一行不匹配,故忽略:

27

=file("D:/Desktop/DemoData/txt/City.txt").cursor@w()

 

=A27.fetch()

使用@w选项,将每行读成序列的序列:

28

=file("D://t1.txt").cursor@c()

 

=A28.fetch()

t1.txt文件内容:

使用@c选项,分隔符缺省使用逗号,返回结果:

29

=file("D://t1.txt").cursor@cp()

 

=A29.fetch()

使用@p选项,解析时处理括号和引号匹配:

30

=file("D://t1.txt").cursor@cpa()

 

=A30.fetch()

使用@a选项,将单引号作为引号处理:

31

=file("D://t2.txt").cursor@l()

 

=A31.fetch()

t2.txt内容如下:

使用@l选项,行尾为转义符\时允许续行:

32

=file("D://t3.txt").cursor@f()

 

=A32.fetch()

使用@f选项,直接用分隔符拆成串:

相关概念:

cs.fetch()

cs.skip()

db.cursor()