我有这样的csv文件:
headerA;headerB;headerC
val1;val2;val3;
val4;val5;val6;
some_word;val7;
所以。最后一行不同。它不适合headerA;headerB;headerC
格式。some_word;
就像val7
的副标题。
问题是:如何正确解析csv文档?如何获取此val7
和其他值或跳过文件的最后一行?
我正在使用更快的xml来解析它。 我的代码是:
CsvSchema bootstrapSchema = CsvSchema.builder()
.setColumnSeparator(';')
.setStrictHeaders(true)
.setUseHeader(true)
.build();
CsvMapper mapper = new CsvMapper();
MappingIterator<OuterData> readValues =
mapper.readerFor(OuterData.class).with(bootstrapSchema).readValues(outerDataContent);
return readValues.readAll();
好的。我用 xtext 解决了它。 没那么难,现在我有了我的csv文件的干净模型。
- 下载 eclise 安装
- 安装时选择 Eclipse DSL 工具
- 运行 eslise DSL
- 创建新项目"Xtext Project"。不要忘记勾选 Facets> Eclipse 插件
- 然后转到您的基本名称包> src> [您的基本包]。在那里你会看到 *.xtext 文件
- 描述您的.csv文件
- 在附近,您将看到 *.mwe2 文件。右键单击它>运行方式>MWE2工作流。它将产生你和日食需要的一切
- 右键单击基本名称包>运行方式> Eclipse 应用程序>启动运行时 Eclipse。它将运行 eclipse 应用程序的新实例,但它将是您的 eclipse 实例。 在这里,您应该使用 * 创建新项目。[your_extention] 文件。your_extention是您在创建项目时在第一页上选择的扩展名。
- 将您的 csv 文件内容放入此新文件。
现在,如果需要,您可以使用示例反射 Ecore 模型编辑器打开此文件(右键单击您的文件>打开>使用示例反射 Ecore 模型编辑器(。在那里,您将看到您的csv文件以您之前在*.xtext文件中描述的方式"解析"。
现在,您需要创建 *.jar 文件以在 Java 项目中实现它。那里没有什么特别的。
MVN 干净包安装
我不记得了,但我在想,首先我构建[你的基础包].parent包,然后构建[你的基础包]。
====
==============在你的Java项目中,你应该做这样的事情:
// init dsl model. It's standalone because it can work without eclipse and stuff
NameOfYourXtextProjectStandaloneSetup.doSetup();
NameOfYourXtextProjectStandaloneSetupGenerated ssg = new NameOfYourXtextProjectStandaloneSetupGenerated();
// get injector to get environment members
Injector injector = ssg.createInjector();
ByteArrayInputStream inputStream = new ByteArrayInputStream(yourCsvTextAsString.getBytes());
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
Resource resource = resourceSet.createResource(URI.createURI("name.[your_extention]"));
try {
resource.load(inputStream, Collections.EMPTY_MAP);
} catch (IOException e) {
log.error("Error while reading from resource");
return Collections.EMPTY_LIST;
}
return (List<TransactionsFile>) (EList) resource.getContents();