解析两种结构的 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 脚本
To:@leavedy
CC:@279400248
看到这个案例,让我想起昨天碰到的一个 csv,有这种括号 <>,括号里有逗号,形如 <xxx,xxx…>,<yyy…,yyy..>
这种形式的 csv 如何解析?
1、拆分,可以读成文本的形式用正则表达式去拆,但我感觉此方法不是首选,文件大一点,应该会很慢。
2、解析,但 spl 中 @p 选项支持的括号只有英文状态下的 (),[],{} 这样的 3 种。还有双引号和单引号也能支持。
所以,我就琢磨,类似这种对称的括号不管是英文状态还是中文状态,import@p 是否可以都能解析。
我想到了 Java 正则中有一个 Pattern \p{javaMirrored} 就是针对这种对称括号的:
以上对称括号可否得到 @p 选项的支持,有些商品的规格啥的很多这种括号。
恳请大佬们得空时考虑一下是否可行,谢谢🙏
英文版
f.import@rp() rp 选项同时使用时增加了对中文括号的处理,可以更新开源程序试用。
谢谢大佬🙏 谢谢老贼🙏
数据源不正规,神仙也秃顶。有了这个针对各种括号的选项,就省事了,减少很多麻烦,SPL 真牛👍
我网上翻了个遍,各种七七八八牛逼吹上天的并没有针对括号的参数选项…
SPL…Omnipotent and Reliable.
程序已更新,请前往下载贴中下载最新的 esproc-bin.jar 文件。
谢谢大佬🙏
密切关注😂 已更新,好用的很👍