Univocity - обнаружение пропущенного столбца при разборе CSV - PullRequest
1 голос
/ 27 июня 2019

Я использую библиотеку Univocity для анализа CSV, и она отлично работает, но мне нужен способ определить, содержит ли анализируемый файл меньше столбцов, чем требуется

Например, если я ожидаю 3файл столбцов, со столбцами, сопоставленными с [H1, H2, H3], затем я получил файл (без заголовков), который выглядит как

V1_H1,V1_H2
V2_H1,V2_H2

При использовании

record.getString("H3");

это будетreturn null , вместо этого мне нужно, чтобы этот файл либо не анализировался, либо я могу проверить, пропустил ли он столбец, и прекратить его обработку

Есть ли способ добиться этого?

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Так как моя главная проблема здесь состоит в том, чтобы убедиться, что количество заголовков совпадает с количеством столбцов, предоставленных в файле CSV, и, поскольку я использую итератор для перебора записей, я добавил проверку как:

CsvParser parser = new CsvParser(settings);
ResultIterator<Record, ParsingContext> iterator = parser.iterateRecords(inputStream).iterator();
if(iterator.getContext().parsedHeaders().length != settings.getHeaders().length){
    throw new Exception("Invalid file");
}

Это работает для меня, не уверен, есть ли лучший способ сделать это.

1 голос
/ 27 июня 2019

Я смотрел документацию Univocity и нашел здесь , что есть способ добавить аннотации к объектам назначения, которые вы собираетесь сгенерировать из CSV-ввода

    @Parsed
    @Validate
    public String notNulNotBlank; //This should fail if the field is null or blank

    @Parsed
    @Validate(nullable = true)
    public String nullButNotBlank;

    @Parsed
    @Validate(allowBlanks = true)
    public String notNullButBlank;

Это также поможет вам использовать объекты вместо того, чтобы работать с полями.

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

...