一个文件有多段组成,要横向拼接
【问题】
Is there a Java library that would allow me to parse CSV files that have headers defined on multiple lines? Here's an example for such a CSV :
$ID$,$Customer$
Cust1, Jack
Cust2 , Rose
$Name$,$Location$
Sherlock,London
Clouseau,Paris
The "$" symbol indicates the presence of headers on that line, and the values in subsequent rows map to these headers.
【回答】
复述问题为:每个二维表行数相同,首行是字段名,将纵向拼接的N个窄二维表规范化为横向拼接的宽二维表。按照是否包含$将数据分为N个二维表;新建空二维表,列名为各二维表的首行;取出各二维表第2至最后一行,按顺序依次拼接起来,作为空二维表的记录;将记录填入空二维表。
上述算法涉及分组运算、有序运算、动态二维表,用JAVA实现复杂度相当高,但用SPL则简单多了:
A |
|
1 |
=file("d:\\source.csv").import@c() |
2 |
=A1.group@i(left(#1,1)=="$") |
3 |
=create(${A2.conj(~(1).array()).concat@c()}) |
4 |
=to(2,A2(1).len()).conj((t=~,A2.(~(t).array()).conj())) |
5 |
=A3.record(A4) |
A1:读取文件source.csv的内容。
A2:分组,将第一列以$开头直到下一个以$开头的数据分为一组。
A3:创建一个由A2各组第一行内容组成的二维表。
A4:从A2各组第二行开始依次取得同一行数据,组成序列返回。
A5:用序列A4的成员组成序表A3的新记录。
上述代码很容易和JAVA集成,参考Java 如何调用 SPL 脚本。
回帖内容已被屏蔽。