gpt4 book ai didi

java - 在第一行加载带有标题的 CSV 文件时,有没有办法自动检测 FIELD/COLUMN 顺序?

转载 作者:行者123 更新时间:2023-11-30 09:03:42 24 4
gpt4 key购买 nike

我的 CSV 文件始终包含相同的字段或相同字段的子集。然而,它们来自不同的供应商,每个供应商都有不同的顺序。如果字段为空,一些提供者也会包含该字段,而其他提供者会删除它。示例:

提供者 1.txt:

id,name,address,url
3,ruth,ruth address,ruth.com
B,sonia,sonia's street, thisissonia.eu

提供者 2.txt:

id,url,name
3,shutupmag.com,maggie
B,khaleesi.org,Mother of Dragons

第一行总是标题,标题总是相同的(可能会省略一个或多个标题)。

我正在使用 Camel Route 进行处理,使用 Bindy 和带注释的类进行编码/解码。我对我的解决方案非常满意,但现在当我想处理不同的提供者时,我必须手动编辑我的 Bean 中字段的顺序。我的 Bean 中有这样的东西:

@DataField(pos = 4, defaultValue = "") //for provider Stark
//@DataField(pos = 2, defaultValue = "") //for provider Lannister
//@DataField(pos = 3, defaultValue = "") //for provider Targaryen
public String url = "";

感觉很糟糕,我认为可能有一种方法可以从第一行推断字段。至少这是有道理的。我可以在处理器中做到这一点,但我喜欢 Bindy,它很棒,我想继续使用它。我想我可以为每个提供者使用不同的文件夹,并为每个文件夹使用不同的 bean,但这也不是我想要的。提供商可以更改顺序或字段,恕不另行通知。但他们总是需要在第一行发送字段。

最后一个问题:我可以使用 Bindy 自动检测 Camel 中的 CSV 字段名称吗(或其他组件,我乐于接受建议,我只是更喜欢继续使用 Bindy) ?

最佳答案

或者,您可以使用 Camel CSV component .您没有得到完全初始化的值 bean,而是一个包含键值对的映射列表:

final CsvDataFormat format = new CsvDataFormat();
format.setUseMaps(true);
format.setDelimiter(",");

from("direct:start")
.unmarshal(format)
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
final List<Map<String, String>> body = exchange.getIn().getBody(List.class);
for (final Map<String, String> row : body) {
LOG.info("new row: {}", row);
}
}
});

与:

template.sendBody("direct:start", "id,name,address,url\n3,ruth,ruth address,ruth.com\nB,sonia,sonia's street, thisissonia.eu");
template.sendBody("direct:start", "id,url,name\n3,shutupmag.com,maggie\nB,khaleesi.org,Mother of Dragons");

你得到以下输出:

new row: {id=3, address=ruth address, url=ruth.com, name=ruth}
new row: {id=B, address=sonia's street, url=thisissonia.eu, name=sonia}
new row: {id=3, url=shutupmag.com, name=maggie}
new row: {id=B, url=khaleesi.org, name=Mother of Dragons}

关于java - 在第一行加载带有标题的 CSV 文件时,有没有办法自动检测 FIELD/COLUMN 顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25546936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com