一个文件有多段组成,要横向拼接

【问题】

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的内容。

undefined

A2:分组,将第一列以$开头直到下一个以$开头的数据分为一组。

A3:创建一个由A2各组第一行内容组成的二维表。

undefined

A4:从A2各组第二行开始依次取得同一行数据,组成序列返回。

undefined

A5用序列A4的成员组成序表A3的新记录。

undefined

述代码很容易和JAVA集成,参考Java 如何调用 SPL 脚本