解析两种结构的 csv

某个 csv 文件有两种结构,前 2 行是一种、第 3 行到结尾是一种,单独每种结构都是规范的。

CENTER_LABEL,LAYOUT,TYPE,WEIGHTED_TYPE,DIFFICUTLY,HINT,INITIAL,MASK,LEFT_LABEL,LEFT_VALUE_LIMIT
,,,AUTOMATIC,,,0,,,1
COLUMN_VALUE,CORRECT,CORRECT_ID,FEEDBACK,INITIAL,OTHER,PERCENT,ROW_VALUE,SEQUENCE
<p>c2</p>,false,,,false,false,50,<p>r1</p>,1
<p>c1</p>,false,,,false,false,0,<p>r2</p>,0
<p>c1</p>,false,,,false,false,0,<p>r1</p>,0
<p>c2</p>,false,,,false,false,50,<p>r2</p>,1

要求用 Java 将该 csv 解析为两个规范的二维表


CENTER_LABEL LAYOUT TYPE WEIGHTED_TYPE DIFFICUTLY HINT INITIAL MASK LEFT_LABEL LEFT_VALUE_LIMIT
1


AUTOMATIC 0 1

以及


COLUMN_VALUE CORRECT CORRECT_ID FEEDBACK INITIAL OTHER PERCENT ROW_VALUE SEQUENCE
1 <p>c2</p> FALSE FALSE FALSE 50 <p>r1</p> 1
2 <p>c1</p> FALSE FALSE FALSE 0 <p>r2</p> 0
3 <p>c1</p> FALSE FALSE FALSE 0 <p>r1</p> 0
4 <p>c2</p> FALSE FALSE FALSE 50 <p>r2</p> 1

编写SPL脚本:


A B
1 =file("data.csv").import@si()
2 =A1.to(,2).concat("\n") =A2.import@tc()
3 =A1.to(3,).concat("\n") =A3.import@tc()
4 return B2,B3

A1:解析文件,读为行组成的序列。

A2:取前 2 行,用回车合并为一个字符串。

B2:将字符串解析为二维表,带表头,分隔符为逗号。

Java 集成 SPL 可参考 Java 如何调用 SPL 脚本

问题来源:https://stackoverflow.com/questions/72047230/java-opencsv-reading-a-file-that-contains-multiple-header-lines