解析两种结构的 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