【发布时间】:2020-03-07 01:28:50
【问题描述】:
我有如下数据
ID1,ID2,FIRST_NAME,LAST_NAME,BIRTH_DATE,HA1,HA2,HA3,STATUS,DT
99,13863926H,MAL"COLMHS,ABBOT,1997-04-09,AMKC,RR,RR ,DE,
89,12973388H,"SAGAR,TARLE",ABDAT,1997-11-02,RNDC,RR,RR ,DE,
71,88JunkTest,Howdy,Doody,1985-11-02,RNDC,HA,HACLASSTYPE ,DE,2019-12-25
我正在尝试使用打开的 CSV 解析 csv,其中我的 CSV 名字可以包含双引号 (MAL"COLMHS) 或带逗号的双引号 ("SAGAR,TARLE") 或不带双引号的名字。
所以使用 .withIgnoreQuotations(true) 我可以解析第一行 (MAL"COLMHS) 但无法找到解析第二行的解决方案。
我尝试了具有多个 StackOverflow 链接的解决方案,但无法解决它们。
我知道我的 CSV 文件不一致,但来自客户端的 CSV 文件中存在太多此类记录,并且很难手动使其保持一致,因此尝试搜索自动化解决方案。
List<Results> beans = new CsvToBeanBuilder<Results>(new FileReader(file.getAbsolutePath()))
.withType(Results.class)
.withIgnoreQuotations(true)
.build().parse();
错误
java.lang.RuntimeException: Error parsing CSV line: 3. [3491903139,12973388H,SAGAR,TARLE,ABDAT,1997-11-02,RNDC,RR,RR ,DE,]
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:366)
at com.apds.partner.nycdoc.main.NycDocApplication.main(NycDocApplication.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.
at com.opencsv.bean.HeaderColumnNameMappingStrategy.verifyLineLength(HeaderColumnNameMappingStrategy.java:110)
at com.opencsv.bean.AbstractMappingStrategy.populateNewBean(AbstractMappingStrategy.java:313)
at com.opencsv.bean.concurrent.ProcessCsvLine.processLine(ProcessCsvLine.java:132)
at com.opencsv.bean.concurrent.ProcessCsvLine.run(ProcessCsvLine.java:85)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
*****
编辑: 我也试过 SuperCSV 但同样的问题
【问题讨论】:
-
您应该发布您尝试过的代码,以便我们知道哪里出错了
-
请检查更新后的代码
-
所以“SAGAR,TARLE”会被解析为 FIRST_NAME,值为 SAGAR,TARLE?让我知道我的理解是否正确。
-
您需要修复您的 csv。您不能忽略双引号并同时使用它们将字段括起来。
-
@hagarwal 是的,“SAGAR,TARLE”将被解析为 FIRST_NAME,其值为 SAGAR、TARLE 或
标签: java csv parsing pojo opencsv