gpt4 book ai didi

java - Apache CSV 阅读器 : How to read CSV columns by header name?

转载 作者:行者123 更新时间:2023-12-01 21:16:20 25 4
gpt4 key购买 nike

我正在尝试读取 CSV 文件,我的方法是识别列标题并读取其中的数据。 apache 有一个库可以做到这一点。

下面是我的代码

public class CSVItemReader {

private File file;

public CSVItemReader(File file)
{
this.file = file;
}

public List<Item> readFile()
{
try
{
Reader reader = new FileReader(file);
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withHeader("Unit of Measure","Item Description")
.withIgnoreHeaderCase()
.withTrim());
int i=0;
for (CSVRecord csvRecord : csvParser) {


String itemDescription = csvRecord.get("Item Description");
String itemName = csvRecord.get("Unit of Measure");

System.out.println(itemName+" : "+itemDescription);
}
}
catch(Exception e)
{
e.printStackTrace();
}

return null;
}
}

不幸的是,读者只能阅读第一个标题item description下的项目。其余的被忽略,只打印空白。

我的 CSV 文件也有点不同,它是直接从 MS Excel 保存为 .CSV 的文件。因此存在空白列等。我不能保证第一列始终为空白,第三列始终为空白等。这就是为什么我需要程序来识别列中的标题并读取其中的数据。

我还必须说我可以使用 index 很好地阅读它们。

下面是我的 CSV 示例。

,Item Description,,On Order,,BackOrd Qty,,On-hand Qty,,Item Name,,Vendor Name,,Active Price,,Item #,,Cost,,Avail Qty,,Department,,Attribute,,Size,,Margin %,,Ext Cost,,Ext Price,,Item Type,,Unit of Measure,,UPC,,Alternate Lookup,,Last Rcvd,,Reorder Point,,Regular Price,,Order Cost,,Margin,,Sale,,Wholesale,,MSRP,,1 Qty,,Custom price,,Dept Code,,Vendor Code,,Cust Ord Qty,,BackOrd Cost,,Last Sold,,Picture Assigned,,Manufacturer,,Shipping Weight,,Length,,Width,,Height,,Eligible for Rewards,,Creation Date,,Quick Pick Group,,Mobile,,

,Booster Pack ,,0,,0,,796,,83717845997,,,,1.99,,2977,,1.09,,796,,Financial Software,,,,,,45.1,,869.65,,"1,584.04",,Inventory,,,,0083733997,,08371734000,,9/26/2019,,0,,1.99,,1.07,,0.9,,1.79,,1.79,,0,,796,,1.79,,,,,,0,,0,,10/19/2019,,FALSE,,,,0,,0,,0,,0,,TRUE,,9/25/2019,,,,FALSE,,

请问我该如何解决这个问题?

最佳答案

如果您希望保持简单并使用映射(以列名作为键,以列值作为值),那么您可以使用 CsvMapReader。 Super CSV 网站上有使用 CsvMapReader 进行读写的示例。

写作非常相似。

ICsvMapReader mapReader = new CsvMapReader(
new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] headers = mapReader.getHeader(true);
Map<String, String> row;
while( (row = mapReader.read(headers)) != null) {
for (String header : headers) {
System.out.println(header + " is " + row.get(header));
}
}
} finally {
mapReader.close();
}

关于java - Apache CSV 阅读器 : How to read CSV columns by header name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872846/

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