Парсер Univocity CSV пропускает строки в зависимости от условий - PullRequest
0 голосов
/ 16 апреля 2020

Можно ли настроить синтаксический анализатор Univocity CSV для пропуска некоторых строк на основе предопределенных условий, таких как, например, значения в ячейках?

Например, у меня есть следующий CSV-файл:

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

, и я хотел бы пропустить из обработки (и удалить из набора результатов) все строки, где city равно London .

Я не могу найти такую ​​функциональность в документации. Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 19 апреля 2020

Не уверен, что это лучшее решение , но взгляните:

    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();
...