首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Univocity解析CSV时检测缺少的列

Univocity解析CSV时检测缺少的列
EN

Stack Overflow用户
提问于 2019-06-27 13:58:12
回答 2查看 705关注 0票数 2

我正在使用Univocity库来解析CSV,它工作得很好,但我需要一种方法来检测被解析的文件中的列是否比所需的少

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

代码语言:javascript
复制
V1_H1,V1_H2
V2_H1,V2_H2

在使用时

代码语言:javascript
复制
record.getString("H3");

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

有办法做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-28 15:17:02

因此,由于我在这里的主要问题是确保标头计数与CSV文件中提供的列数相同,而且由于我使用迭代器对记录进行迭代,所以我添加了如下检查:

代码语言:javascript
复制
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");
}

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

票数 2
EN

Stack Overflow用户

发布于 2019-06-27 14:35:42

我看过Univocity,我发现这里有一种方法可以将注释添加到您要从CSV输入生成的目标对象中

代码语言:javascript
复制
    @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;

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

希望这有帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56792683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档