gpt4 book ai didi

java - 如何使用 Super CSV 处理列数未知的 CSV 文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:58 24 4
gpt4 key购买 nike

对于一个项目,我需要处理 CSV 文件,其中我不知道运行前的列。 CSV 文件是完全有效的,我只需要一遍又一遍地对几个不同的文件执行一个简单的任务。我确实需要分析列的值,这就是为什么我需要使用库来处理 CSV 文件的原因。为简单起见,假设我需要做一些简单的事情,比如将日期列附加到所有文件,无论它们有多少列。我想用 Super CSV 做到这一点,因为我也使用这个库来完成其他任务。

我正在努力解决的更多是概念问题。如果我事先不知道有多少列,我不确定如何处理这些文件。我不确定我应该如何定义映射任意 CSV 文件的 POJO,或者如果我不知道文件中将包含哪些列和多少列,我应该如何定义单元处理器。如何动态创建与列数匹配的 Cell 处理器?例如,我将如何根据 CSV 文件的 header 定义 POJO?

考虑我有两个 CSV 文件的情况:products.csv 和 address.csv。假设我想为两个文件附加一个包含今天日期的日期列,而不必编写两个不同的方法(例如 addDateColumnToProduct() 和 addDateColumnToAddress())来做同样的事情。

产品.csv:

name, description, price
"Apple", "red apple from Italy","2.5€"
"Orange", "orange from Spain","3€"

地址.csv:

firstname, lastname
"John", "Doe"
"Coole", "Piet"

如何根据 CSV 文件的 header 信息定义映射产品 CSV 的 POJO?细胞处理器有同样的问题吗?我怎么能定义一个非常简单的单元处理器,它基本上只有适量的构造函数参数,例如对于产品.csv

CellProcessor[] processor = new CellProcessor[] { 
null,
null,
null
};

对于 address.csv:

CellProcessor[] processor = new CellProcessor[] { 
null,
null
};

这可能吗?我在实现这一目标的道路上走错了吗?

编辑 1:不是在寻找一种解决方案来处理在一个文件中具有可变列的 CSV 文件。我试图弄清楚是否有可能在运行时处理任意 CSV 文件,即我能否在运行时仅基于 CSV 文件中包含的 header 信息创建 POJO。事先不知道一个 csv 文件将有多少列。

解决方案根据@baba的回答和评论

private static void readWithCsvListReader() throws Exception {

ICsvListReader listReader = null;
try {
listReader = new CsvListReader(new FileReader(fileName), CsvPreference.TAB_PREFERENCE);

listReader.getHeader(true); // skip the header (can't be used with CsvListReader)
int amountOfColumns=listReader.length();
CellProcessor[] processor = new CellProcessor[amountOfColumns];
List<Object> customerList;

while( (customerList = listReader.read(processor)) != null ) {
System.out.println(String.format("lineNo=%s, rowNo=%s, customerList=%s", listReader.getLineNumber(),
listReader.getRowNumber(), customerList));
}

}
finally {
if( listReader != null ) {
listReader.close();
}
}
}

最佳答案

也许有点晚,但可能会有所帮助...

  CellProcessor[] processors=new CellProcessor[properties.size()];

for(int i=0; i< properties.zise(); i++){
processors[i]=new Optional();

}
return processors;

关于java - 如何使用 Super CSV 处理列数未知的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658579/

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