0

是否可以将 Univocity CSV 解析器配置为根据预定义条件(例如单元格中的值)跳过某些行?

例如,我有以下 CSV 文件:

name,city
Alex,NY
Mike,London
Dan,Sydney

我想从处理中跳过(并从结果集中删除)所有city等于的行London

我无法在文档中找到这样的功能。请指教。

4

2 回答 2

1

不确定这是否是最好的解决方案,但请看一下:

    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();
于 2020-04-18T22:53:21.887 回答
0

您可以在遍历文件时使用迭代器方法并跳过不需要的行。有关更多详细信息,请参阅迭代方法。甚至使用 beans 进行迭代

于 2020-06-12T04:04:06.497 回答