Как пропустить разбор строки другого формата.Fasterxml CSV-разбор - PullRequest
0 голосов
/ 13 октября 2018

У меня есть CSV-файл, как это:

headerA;headerB;headerC
val1;val2;val3;
val4;val5;val6;
some_word;val7;

Итак.Последняя строка отличается.Он не подходит для формата headerA;headerB;headerC.some_word; похоже на подзаголовок для val7.

Вопрос: как правильно проанализировать документ CSV?Как получить это val7 и другие значения или пропустить последнюю строку файла?

Я использую fastxml для его анализа.Мой код:

CsvSchema bootstrapSchema = CsvSchema.builder()
                .setColumnSeparator(';')
                .setStrictHeaders(true)
                .setUseHeader(true)
                .build();
        CsvMapper mapper = new CsvMapper();
        MappingIterator<OuterData> readValues =
                mapper.readerFor(OuterData.class).with(bootstrapSchema).readValues(outerDataContent);
        return readValues.readAll();

1 Ответ

0 голосов
/ 17 октября 2018

Хорошо.Я решил это с помощью Xtext.Не так уж сложно, и теперь у меня есть чистая модель моего CSV-файла.

  1. Загрузка установки eclise
  2. Выбор Eclipse DSL Tools при установке
  3. Запуск eslise DSL
  4. Создать новый проект "Xtext Project".Не забудьте отметить Facets> Eclipse plug-in
  5. Чем перейти к пакету базовых имен> src> [ваш базовый пакет].Там вы увидите * .xtext файл
  6. Опишите ваш .csv файл
  7. Рядом вы увидите * .mwe2 файл.Щелкните правой кнопкой мыши по нему> Run As> MWE2 Workflow.Это сгенерирует все, что вам нужно, и затмение потребует
  8. Щелкните правой кнопкой мыши по пакету базовых имен> Run As> Eclipse Application> Launch Runtime Eclipse.Он запустит новый экземпляр приложения Eclipse, но это будет ваш экземпляр Eclipse.Здесь вы должны создать новый проект с файлом *. [Your_extention].your_extention - это расширение, которое вы выбрали на первой странице, когда создавали проект.
  9. Поместите содержимое файла CSV в этот новый файл.

сейчас, если хотите, вы можете открыть этофайл с образцом редактора отражающей модели Ecore (щелкните правой кнопкой мыши по файлу> откройте с помощью> образца редактора отражающей модели Ecore).Там вы увидите, что ваш CSV-файл "проанализирован" так, как вы описали ранее в * .xtext файле.

Теперь вам нужно создать * .jar-файл, чтобы реализовать его в вашем Java-проекте.Там нет ничего особенного.

mvn clean package install

Я не помню, но сначала думаю, что я соберу [ваш базовый пакет] .parent пакет, а затем соберу [ваш базовый пакет].

==================

В вашем Java-проекте вы должны сделать что-то вроде этого:

// init dsl model. It's standalone because it can work without eclipse and stuff
NameOfYourXtextProjectStandaloneSetup.doSetup();
NameOfYourXtextProjectStandaloneSetupGenerated ssg = new NameOfYourXtextProjectStandaloneSetupGenerated();
// get injector to get environment members
Injector injector = ssg.createInjector();

ByteArrayInputStream inputStream = new ByteArrayInputStream(yourCsvTextAsString.getBytes());
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);

Resource resource = resourceSet.createResource(URI.createURI("name.[your_extention]"));
try {
    resource.load(inputStream, Collections.EMPTY_MAP);
} catch (IOException e) {
    log.error("Error while reading from resource");
    return Collections.EMPTY_LIST;
}
return (List<TransactionsFile>) (EList) resource.getContents();
...