如果需要读入文本文件中的数据,可以使用file函数和import函数。如文本文件empolyee.txt中,保存了500名员工的信息,如下:
EID |
NAME |
SURNAME |
GENDER |
STATE |
BIRTHDAY |
HIREDATE |
DEPT |
SALARY |
1 |
Rebecca |
Moore |
F |
California |
1974-11-20 |
2005-03-11 |
R&D |
7000 |
2 |
Ashley |
Wilson |
F |
New York |
1980-07-19 |
2008-03-16 |
Finance |
11000 |
3 |
Rachel |
Johnson |
F |
New Mexico |
1970-12-17 |
2010-12-01 |
Sales |
9000 |
4 |
Emily |
Smith |
F |
Texas |
1985-03-07 |
2006-08-15 |
HR |
7000 |
5 |
Ashley |
Smith |
F |
Texas |
1975-05-13 |
2004-07-30 |
R&D |
16000 |
6 |
Matthew |
Johnson |
M |
California |
1984-07-07 |
2005-07-07 |
Sales |
11000 |
7 |
Alexis |
Smith |
F |
Illinois |
1972-08-16 |
2002-08-16 |
Sales |
9000 |
8 |
Megan |
Wilson |
F |
California |
1979-04-19 |
2004-04-19 |
Marketing |
11000 |
9 |
Victoria |
Davis |
F |
Texas |
1983-12-07 |
2009-12-07 |
HR |
3000 |
… |
|
|
|
|
|
|
|
|
在集算器中使用文本数据作为数据表使用时,对其中的格式是有要求的:记录之间用回车分隔,每个字段之间用制表符tab分隔。通过简单的代码,就可以将文本数据导入:
|
A |
1 |
=file("employee.txt") |
2 |
=A1 .import@t() |
3 |
=A1 .import() |
在集算器中,import函数用来将文件中的数据读入为序表。其中,A1中创建文件对象,当文件名中未指定路径时,将到设置中的主路径中寻找。在菜单栏中选择Tool>Options,即可在Option窗口的Environment页面中,查看或设置主路径:
A2将文件导入为报表,使用import函数时,添加了@t选项,导入时会将文本文件的第一行读为各列的名称。为了对比,在A3中导入时未使用选项。执行后,A2中读入的序表如下:
如果文件中,各个字段之间的分隔符并非tab,如csv文件是使用逗号来分隔字段的,此时在使用import时,也可以指定分隔符。如修改A2中的代码为:=A1 .import@t(;,",")。
A3中读入的序表如下:
可以看到,当未使用@t选项时,将自动生成序表的字段名,按位置命名为_1,_2,_3等。
在将文本文件中的数据读入时,数据的数据类型会按照第一行数据自动解析。由于empolyee.txt的第一行数据是字段名,因此A3中各个字段的数据都会解析为字符串。如上面结果中的_1列与_9列,都是字符串,因此在展现时都是靠左对齐的;在A2结果中的EID字段和SALARY字段中的数据则是整数,展现时靠右对齐。
将文本文件导入为序表时,也可以只选择其中的部分字段。如:
|
A |
1 |
=file("employee.txt") |
2 |
=A1 .import@t(EID,NAME,BIRTHDAY,SALARY) |
3 |
=A1 .import(#1,#2,#6,#9) |
A2中添加@t选项,指定选出字段时可以直接使用字段名,数据如下:
A3中没有读入字段名,指定选出字段时,只能使用字段序号,用#i的格式指定。读入序表如下:
在前面提到,文本文件导入时,数据类型会根据第一行的数据类型自动解析。如果需要特定的数据类型,可以在选择部分数据时,指定导入字段的数据类型。如:
|
A |
1 |
=file("employee.txt") |
2 |
=A1 .import@t(EID:string,NAME,BIRTHDAY:date,SALARY:int) |
3 |
=A1 .import(#1:string,#2,#6:date,#9:int) |
在集算器中指定字段类型时,可以使用以下几种设定:
设定 |
string |
int |
float |
long |
decimal |
date |
datetime |
time |
bool |
类型 |
字符串 |
整数 |
浮点数 |
长整数 |
长实数 |
日期 |
日期时间 |
时间 |
布尔型 |
如果需要进一步了解各个数据类型的信息,可以查看1.3基本数据类型。
在A2中,读入数据时,指定EID字段为字符串,BIRTHDAY为日期,SALARY为整数。执行后,A2中序表如下:
A3中对各个字段类型的设定与A2相同,读取到的序表如下:
可以发现,在指定了某一列的数据类型时,如果某些数据无法解析为指定类型,将自动解析,如第一行标题行中的数据,会自动解析为字符串。
关于数据导入之后的计算,请参阅2.5使用序表与排列。
除了将文本数据导入为序表,在集算器中,也可以将数据导出到文本文件中。导出时,通常使用序表或者排列中的数据,但也可以用普通序列。导出到文件时需要使用export函数,如:
|
A |
1 |
=file("employee1.txt") |
2 |
=create(EID,NAME).record([1,"Frank",2,"Harry"]) |
3 |
>A1.export(A2) |
A1中创建文件对象,准备将数据存储到employee1.txt中,此时文件仍然存储在报表的主路径中。A2中新建了一个序表,并填入了2条记录如下:
A3中,将序表中的数据导出到文件,employee1.txt中数据如下:
在导出时也可以添加@t选项导出列名,也可以导出部分字段。如将A3中的代码修改为>A1.export@t(A2,NAME),导出后,文件employee1.txt中数据如下:
在导出文件时,字段之间默认使用制表符Tab作分隔,与import的使用类似,在export时也可以指定其它分隔符。如:
|
A |
1 |
=file("employee2.txt") |
2 |
=create(EID,NAME).record([1,"Frank",2,"Harry"]) |
3 |
>A1.export@t(A2;"_") |
在A3中用export函数输出文本文件时,在分号后指定了"_"为分隔符,此时输出的文件employee2.txt中数据如下:
在数据分析处理中,CSV文件是比较常用的,这种文件常为逗号分隔的文本文件,在使用逗号作为分隔符时,可以在export函数中指定,也可以添加@c选项,表示用逗号作为分隔符,如:
|
A |
1 |
=file("employee3.csv") |
2 |
=create(EID,NAME).record([1,"Frank",2,"Harry"]) |
3 |
>A1.export@tc(A2) |
此时输出的文件employee3.csv用Excel及文本工具打开结果分别如下:
在导入文本文件数据时,也可以添加@c选项使用逗号作为分隔符。
除了使用文本数据,在集算器中还可以使用集文件,只需在export或者import时添加@b选项即可,有关内容将在7.8集文件 中讲述。