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

博客讨论了如何处理具有多行定义的CSV文件头,并将其转换为横向拼接的二维表。使用Java库处理这种复杂的CSV格式具有挑战性,但通过SPL脚本可以简化此任务,涉及分组、有序运算和动态列的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】

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 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值