本章介绍import()函数的多种用法。
描述:
用字符串中读出的内容作为记录并返回成序表
语法:
S.import(Fi:type;fmt,…;s) |
|
备注:
用字符串S中读出的内容作为记录,最终返回成序表。
参数:
S |
字符串。字符串的格式:记录间用空格隔开,字段间用自选分隔符隔开,缺省为tab键隔开 |
Fi |
读出的字段,缺省读出所有。 |
type |
字段类型,包括:bool、int、long、float、decimal、number、string、date、time和datetime,缺省使用第一行数据类型。type为整数时表示排号长度 |
fmt |
日期时间格式。 |
s |
自选分隔符,缺省默认分隔符是tab。 |
选项:
@t |
f中第一行记录作为字段名,不使用本选项就使用_1,_2,…作为字段名。 |
@c |
无s时用逗号分隔。如果同时有s则用s分隔。 |
@j |
从json格式串中导入并解析出序表,忽略s。[{F:v,…},…],v是F的取值,字符串常数将加引号,v是序列或序表时递归表示 |
@x |
从XML格式串读入成多层记录或序表(类似json) <>内的标识作为字段名,重复的同名标识生成为序表。<>内的非标识名属性暂先忽略。 <xml> <table> <row> <F>v</F> … </row> … </table> </xml> s表示要取出的层标识,多层用/分隔,空表示从根开始取 |
@s |
不拆分字段,读成单字段串构成的序表,忽略参数 |
@i |
结果集只有1列时返回成序列 |
@q |
如果字段串外有引号则先剥离,包括标题部分,处理转义 |
@o |
将引号作为转义符 |
@k |
保留数据项两端的空白符,缺省将自动做trim |
@e |
Fi在串中不存在时将生成null,缺省将报错 |
@d |
行内有数据不匹配类型和格式时删除该行,此时会按type检查类型 |
@n |
行内的列数不匹配算时忽略此行 |
@v |
与@d或@n联合使用,出现不匹配时抛出违例,中断程序,输出出错行的内容 |
返回值:
序表
示例:
|
A |
|
1 |
=demo.query("select * from EMPLOYEE") |
|
2 |
=A1.(~.array().concat@c()) |
转换为字串序列 |
3 |
=A2(1).import(;",") |
选取序列中的一个字串,从字串中选出所有字段,并指定分隔符为逗号,最后返回结果为序表 |
4 |
=demo.query("select EID,NAME,SURNAME from EMPLOYEE") |
|
5 |
= A4.export() |
|
6 |
= A4.export@t(EID:id,NAME:name,SURNAME:surname;"|") |
|
7 |
=A5.import() |
无参数,缺省分隔符为tab,用_1,_2,…作为字段名 |
8 |
=A6.import@t(id:int,name;"|") |
选出id和name字段,分隔符为“|” |
9 |
="{name:'China',province:[{name:'HeiLongJiang',cities: {city:['HaErBin','DaQing']}},{name:'GuangDong', cities:{city:['GuangZhou','ShenZhen','ZhuHai']}},{name:'TaiWan',cities: {city:['TaiBei','GaoXiong']}},{name:'XinJiang', cities:{city:['WuLuMuQi']}}]}".import@j() |
从json格式串中解析出序表,[{F:v,…},…],v是F的取值,v是序列或序表时递归表示
|
10 |
= A4.export@j() |
|
11 |
=A10.import@j() |
|
12 |
= A4.export@x(;"employee/name") |
|
13 |
=A12.import@x(EID;"employee/name") |
从name层读取记录中的EID字段 |
14 |
=A2(1).import@c() |
使用@c选项,分隔符缺省使用逗号 |
15 |
=A5.import@s() |
使用@s选项,不拆分字段,读成单字段串构成的序表 |
16 |
=A5.import@si() |
结果集只有1列时返回成序列 |
17 |
=["12\r34","aa\nbb"].export@q() |
|
18 |
=A17.import() |
|
19 |
=A17.import@q() |
使用@q先剥离引号后再转为序表 |
20 |
=["12\r34","aa\nbb"].export@qo() |
|
21 |
=A20.import@qo() |
使用@o选项, 将引号作为转义符 |
22 |
=" abc ".import@k() |
保留两端的空白符 |
23 |
=A6.import@te(id:int,name,dept;"|") |
dept在串中不存在时生成null |
24 |
id|name|surname a|Rebecca|Moore 2|Ashley|Wilson 3|Rachel|Johnson 4|Emily|Smith 5|Ashley|Smith 6|Matthew|Johnson 7|Alexis|Smith 8|Megan|Wilson |
|
25 |
=A24.import@td(id:int,name;"|") |
行内有数据不匹配类型,则删除该行 |
26 |
=A24.import@tv(id:int,name;"|") |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容,此处报错信息: Error in cell A26
|
27 |
id|name|surname 1|Rebecca|Moore 2|Ashley 3|Rachel|Johnson 4|Emily |
|
28 |
=A27.import@tdn(id:int,name,surname;"|") |
第2/3行内数据列数与序表不匹配,故忽略这两行 |
相关概念:
描述:
读取文件内容并返回成序表
语法:
f.import() |
|
f.import(Fi:type:fmt,…;k:n,s) |
从文本文件f中读取n段中的第k段数据,Fi为读出的字段,缺省读出所有字段。s为自选分隔符,缺省分隔符是tab。 在分段读取时,会自动调整位置使读取到的整条内容读入记录,同时会保证读取时数据的连续性,避免出现重复或遗漏。 |
备注:
读取文件f,将读取的每行内容作为一个记录形成序表返回。
参数:
f |
文件 |
Fi |
读出的字段,缺省读出所有,用#时表示用序号定位 |
type |
字段类型,包括:bool、int、long、float、decimal、string、date、time和datetime,缺省使用第一行数据类型,type为整数时表示排号长度。 |
fmt |
日期时间格式。 |
s |
自选分隔符,缺省默认分隔符是tab。省略参数s时,s前边的逗号可以省略。 |
k |
分段号 |
n |
总段数。k和n都省略时表示读全文件。 |
选项:
@t |
f中第一行记录作为字段名,不使用本选项就使用_1,_2,…作为字段名,Fi是#i时仍保持原列名。 |
@b |
读取export出的二进制文件,支持参数Fi、k和n,不支持参数type和s,忽略选项@t@s@i@q@m。记录数少或不分段文件在分段读取时可能会有空段。 |
@e |
Fi在文件中不存在时将生成null,缺省将报错。 |
@s |
不拆分字段,读成单字段串构成的序表,忽略参数 |
@i |
结果集只有1列时返回成序列 |
@q |
如果字段串外有引号则先剥离,包括标题部分,并处理转义。 |
@m |
多线程取数,加快读取文件速度。结果集次序不确定,有k:n参数时忽略该选项。常用于从大文件取数。授权文件和配置信息中并行数需大于1。 |
@c |
无s时用逗号分隔。如果同时有s则用s分隔。 |
@o |
用引号作为转义符 |
@k |
保留数据项两端的空白符,缺省将自动做trim |
@d |
行内有数据不匹配类型和格式时删除该行,此时会按type检查类型 |
@n |
列数和第一行不匹配也作为错误处理,将被抛弃 |
@v |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容 |
返回值:
以文件对象f中的文件内容作为记录的序表。
示例:
|
A |
|
1 |
=file("D:\\score.txt").import() |
|
2 |
=file("D:\\score.txt").import@t() |
|
3 |
=file("D:\\score.txt").import(;1:2) |
省略选出字段和分隔符s,读取分段中的第一段数据 |
4 |
=file("D:\\Department2.txt").import(;,"|") |
省略选出字段,k和n。读取全文件 |
5 |
=file("D:\\Department2.txt").import(;1:3,"|") |
省略选出字段 |
6 |
=file("D:\\EMPLOYEE.txt").import@c(GENDER;1:2) |
EMPLOYEE.txt内容以逗号分隔,读取第一段数据中的GENDER的字段值。 |
7 |
=file("D:\\Department5.txt").import@t(DEPT,MANAGER:int;1:3,"/") |
Department5.txt内容以斜杠分隔,按照指定字段DEPT和MANAGER读出 |
8 |
=file("D:\\score.txt").import@e(EID;1:3) |
score.txt文件中没有字段EID,因此返回空。 |
9 |
=file("D:\\Department.txt").import@ts() |
|
10 |
=file("D:\\EMPLOYEE.btx").import@b(;1:2) |
读取f.export@z(A,x:F,…;)导出的集文件(分段二进制文件)EMPLOYEE.btx,并且取第1段内容 |
11 |
=file("D:\\orders.txt").import@mt(;,",") |
文件比较大,加快读取文件速度。结果跟文件里的记录顺序不一致。 |
12 |
=file("D:\\StuName.txt").import@i() |
StuName.txt只有1列,返回成序列 |
13 |
=file("D:\\test.txt").import@t() |
|
14 |
=file("D:\\test.txt").import@tq() |
|
15 |
=file("D:\\Sale1.txt").import() |
取出Sale1.txt中的所有记录。 |
16 |
=file("D:\\ Sale1.txt").import(#1,#3) |
取出Sale1.txt中的第1列与第3列 |
17 |
=file("D:/Dep3.txt").import@qo() |
Dep3.txt文件内容: 返回结果: |
18 |
=file("D:/Dep1.txt").import@k() |
保留数据项两端的空白符 |
19 |
=file("D:/Department1.txt").import@t(id:int,name;,"|") |
|
20 |
=file("D:/Department1.txt").import@td(id:int,name;,"|") |
行内有数据不匹配类型时删除该行 |
21 |
=file("D:/Department1.txt").import@tv(id:int,name;,"|") |
检查类型匹配且出错时抛出违例,中断程序,输出出错行的内容 |
22 |
=file("Dep2.txt").import@tdn(id:int,name,surname;,"|") |
Dep2.txt文件内容: 第6、8行列数与第一行不匹配,故忽略 |
注意:
txt文件的格式:记录间用回车符隔开,字段间用自选分隔符隔开,缺省为tab键隔开
相关概念: