SPL 读写文件

本文介绍SPL读写文本文件和Excel文件的基本方法,包括简单的文件目录操作。

文本文件

读写结构化文本

结构化文本的格式比较规范,即每行一条记录,列之间用分隔符区分。SPL可用import/export函数读写结构化文本。

比如:ordersNT.txt存储订单记录,列之间用制表符tab分隔,业务意义依次为:订单ID、客户编号、销售ID、订单金额、订单日期。部分数据如下:

26 TAS 1 2142.4 2009-08-0533 DSGC 1 613.2 2009-08-1484 GC 1 88.5 2009-10-16133 HU 1 1419.8 2010-12-1232 JFS 3 468.0 2009-08-1339 NR 3 3016.0 2010-08-2143 KT 3 2169.0 2009-08-27…

将该表按客户编号的字母顺序从小到大的排序,相同的客户编号再按订单金额从大到小排序,最后保持原格式存入新文件。部分结果应当如下:

136 ARO 25 899.0 2009-12-1616 BDR 27 2464.8 2009-07-2381 BDR 29 1168.0 2010-10-14108 BDR 12 480.0 2010-11-15139 BDR 30 166.0 2010-12-1893 BON 6 2564.4 2010-10-29106 BSF 27 10741.6 2009-11-13…

要计算出上述结果,可用如下SPL脚本:

  A
1 =file("D:/data/ordersNT.txt").import()
2 =A1.sort(_2,-_4)
3 =file("D:/data/ordersNT_sort.txt").export(A2)

A1、A3:读入、写出结构化文本文件。

A2:函数sort进行排序,_2和_4分别代表第2列和第4列,默认按顺序排序,负号代表逆序。

SPL也可以处理带列名(标题)的文本文件。比如orders.txt的第1行为列名,部分数据如下:

OrderID Client SellerId Amount OrderDate26 TAS 1 2142.4 2009-08-0533 DSGC 1 613.2 2009-08-1484 GC 1 88.5 2009-10-16133 HU 1 1419.8 2010-12-1232 JFS 3 468.0 2009-08-1339 NR 3 3016.0 2010-08-2143 KT 3 2169.0 2009-08-27…

同样对该文件进行排序,结果带列名写入新文件,可用如下SPL脚本:

  A
1 =file("D:/data/orders.txt").import@t()
2 =A1.sort(Client,-Amount)
3 =file("D:/data/orders_sort.txt").export@t(A2)

A1、A3:选项@t表示带列名读入、写出文本文件。

A2:用列名而不是序号进行排序。

函数import/export默认的分隔符是tab,选项@c表示以逗号为分隔符(常用于csv文件)。如果遇到其他特殊分隔符,SPL同样可以处理。比如orders_semi.txt以||为分隔符,可用如下SPL脚本:

  A
1 =file("D:/data/orders_semi.txt").import@t(;,"||")
2 =A1.select(Amount>=1000 && Amount<2010)
3 =file(""D:/data/orders_semi_select.txt").export@t(A2;"||")

函数export默认的功能是将数据写入新文件,或覆盖同名文件,但有时候我们需要在原文件后面追加结构相同的新数据,这种情况使用@a选项:

=file(""D:/data/orders_semi_select.txt").export@at(A2;"||")

读写字符串序列

有些文本的格式不规范,不能直接进行结构化计算,但可以读为字符串序列。这样的半结构化数据格式繁多,下面用多行记录举例,说明SPL读写字符串序列的一般方法。

文件3lines.txt中每3行的前2行对应一条记录,第3行无用,部分数据如下:

26 TAS 1 2142.42009-08-05some comment33 DSGC 1 613.22009-08-14some comment27 TAS 1 2142.42009-08-05some comment

去掉文件中的无用行,结果写入新文件,可用如下SPL脚本:

  A
1 =file("D:/data/3lines.txt").read@n()
2 =A1.step(3,1,2)
3 =file("D:/3lines_reuslt.txt").write(A5)

A1:读入文本文件。@n表示按行读成序列,序列的每个成员对应一行。

A2:对序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值