Univocity - Как разобрать строку с выбранного символа - PullRequest
1 голос
/ 12 марта 2019

У меня есть следующий файл .csv:

tt0102057, 6, 2010-06-19, Hook

tt0102059, 7, 2013-06-23, Hot Shots!

tt0102070, 5, 2010-02-10, Hudson Hawk

Мне нужно проанализировать значение из 1-го столбца в значение типа int, а не String.Поэтому мне нужно пропустить первые два символа и взять остальные как целое число.

Как я могу сделать это с помощью анализатора однозначности на этапе анализа?

Код работает и сохраняет данные в бинах:

    BeanListProcessor<univMovie> rowProcessor = new BeanListProcessor<univMovie>(univMovie.class);
    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.setProcessor(rowProcessor);
    settings.setHeaderExtractionEnabled(true);

    CsvParser parser = new CsvParser(settings);
    parser.parse(new FileReader("src/main/resources/movie.csv"));
    List<univMovie> beans = rowProcessor.getBeans();

1 Ответ

0 голосов
/ 13 марта 2019

У вас есть много вариантов:

В вашем классе univMovie проще всего добавить примечание @Replace над полем, которое будет получать эти данные:

@Parsed
@Replace(expression = "tt", replacement = "")
int yourField;

Если ваши поля могут быть сложнее, а регулярное выражение не будет простым / понятным решением, вы можете поместить аннотацию @Parsed в метод, который установит это поле для вас:

@Parsed
void setYourField(String value){
    String cleanValue = someMethodToCleanYourValue(value);
    yourField = Integer.parseInt(cleanValue);
}

Вы можететакже попросите процессор конвертировать несколько полей с помощью:

rowProcessor.convertIndexes(Conversions.replace("tt", ""))
    .set(0); //one or more indexes

Надеюсь, это поможет

...