我有一个包含5个字段(列)的csv文件。在5列中,我想要仅读取第二和第四列,这是进一步处理所需的。 现在我正在使用opencsv api的readAll()方法来读取。 通过使用此方法,我必须处理所有列以获取第二和第四列值。
有没有办法读取所需列的值,即从csv文件中读取第二个和第四个值?
这是正确的方法还是我应该使用其他任何方法?
答案 0 :(得分:0)
如果性能是一个问题,从你的问题看起来我会建议你实现自己的解析器。 opencsv没有提供这样的功能。可以说,因为表现胜利不会那么大。
答案 1 :(得分:0)
我不这么认为。
为了确定哪个列具有哪个索引,csv-parser必须处理整行,或者至少在最后一列处理您拥有的内容(在您的情况下为第四列)。即使您的数据具有固定长度,您仍然必须读取整行,以便您知道子串的边界。
如果内存使用有问题,那么使用CSVReader#readAll()不是最佳选择。在这种情况下,我建议使用CSVReader#iterator()代替并按返回者数组的索引访问您的列,例如myCsvRow[1]
和myCsvRow[3]
。
答案 2 :(得分:0)
使用Commons CSV,您可以迭代csv元素并使用列标签读取特定列。
注意:(通用CSV是openCsv和其他csv解析器的统一)。 http://commons.apache.org/proper/commons-csv/
要读取特定列,您可以将每个csvRecord转换为Map并获取其值,如下所示:
List<CSVRecord> aCSVList == aCSVParser.getRecords();
...
for (CSVRecord aCSVRecord : aCSVList)
{
...
Map<String, String> aCurrentMap = aCSVRecord.toMap();
aCurrentMap.get("ColumnLabel");
}