是否可以将 Univocity CSV 解析器配置为根据预定义条件(例如单元格中的值)跳过某些行?
例如,我有以下 CSV 文件:
name,city
Alex,NY
Mike,London
Dan,Sydney
我想从处理中跳过(并从结果集中删除)所有city
等于的行London
。
我无法在文档中找到这样的功能。请指教。
不确定这是否是最好的解决方案,但请看一下:
StringReader input = new StringReader(""
+ "name,city\n"
+ "Alex,NY\n"
+ "Mike,London\n"
+ "Dan,Sydney\n");
CsvParserSettings settings = new CsvParserSettings();
settings.setAutoConfigurationEnabled(true);
settings.setHeaderExtractionEnabled(true);
settings.getFormat().setLineSeparator("\n");
settings.selectFields("name", "city");
settings.setProcessor(new RowListProcessor() {
@Override
public void rowProcessed(String[] row, ParsingContext context) {
super.rowProcessed(row, context);
if (row[1].equalsIgnoreCase("London")) {
context.skipLines(1);
}
}
});
CsvParser parser = new CsvParser(settings);
parser.beginParsing(input);
Object[] row;
while ((row = parser.parseNext()) != null) {
System.out.println(Arrays.toString(row));
}
parser.stopParsing();
您可以在遍历文件时使用迭代器方法并跳过不需要的行。有关更多详细信息,请参阅迭代方法。甚至使用 beans 进行迭代。