1

我正在使用 Univocity 库来解析 CSV,它运行良好,但我需要一种方法来检测正在解析的文件的列是否少于所需的列

例如,如果我期待一个 3 列文件,列映射到 [H1,H2,H3] 那么我收到一个文件(没有标题),看起来像

V1_H1,V1_H2
V2_H1,V2_H2

使用时

record.getString("H3");

这将返回null,相反,我需要这个文件要么无法解析,要么我可以检查它是否遗漏了一列并停止处理它

有什么办法可以做到这一点?

4

2 回答 2

2

因此,由于我的主要问题是确保标题计数与 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");
}

它对我有用,不确定是否有更好的方法。

于 2019-06-28T15:17:02.013 回答
1

我看过 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;

这也将帮助您使用对象,而不必使用字段。

希望有帮助:-)

于 2019-06-27T14:35:42.067 回答