将空行分隔出的不定行合并成逗号分隔串
例题描述和简单分析
有文本文件sample.txt,如下:
CHM 110 - 10
9:30 am - 10:45 am
Thursday
CSC 150 - 04
10:30 am - 11:45 am
Monday
11:30 am - 12:45 am
Wednesday
BIO 132 - 01
需要按空行分隔出的不定行合并成逗号分隔串,结果导出 csv 文件,如下:
CHM 110 - 10,9:30 am - 10:45 am,Thursday
CSC 150 - 04,10:30 am - 11:45 am,Monday,11:30 am - 12:45 am,Wednesday
BIO 132 - 01
解法及简要说明
方法1:串
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=file("sample.txt").read() |
2 |
=A1.split("\n").group@i(~[-1]=="").(~.select(~!="")).concat@nc() |
3 |
=file("result.csv").write(A2) |
简要说明:
A1 txt读成串
A2 按换行符 \n 把串拆成序列,按空行分组并去掉空行,按换行符和逗号将序列的序列拼成串(串拆成序列时,要注意文本的行分隔符,通常地,Unix 和 MacOS X 用 \n,Windows 用 \r\n。SPL 中可以用 import@i 避免这种问题。)
A3 串 A2 写入result.csv文件
方法2(学习扩充):序表
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=file("sample.txt").import@i() |
2 |
=A1.group@i(~[-1]==null).(~.select(~)) |
3 |
=A2.(~.len()).max() |
4 |
=create(${to(A3).concat@c()}) |
5 |
=A2.(~.pad(null,A3)).conj() |
6 |
=A4.record(A5) |
7 |
=file("result.csv").export@c(A4) |
简要说明:
A1 txt读成序列
A2 按空行分组并去掉空行
A3 算出最大列数
A4 按最大列数建空序表
A5 把数据补齐(因为要用 record 依次填到空序表里)
A6 填数据
A7 序表 A4 导出成result.csv
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
英文版