首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuperCSV能力

SuperCSV能力
EN

Stack Overflow用户
提问于 2013-01-14 23:25:04
回答 1查看 1K关注 0票数 3

我正在使用SuperCSV检查接收到的某些文件的内容。文件的格式是这样的:它有一个头记录,后面是数据记录,后面是一个CRC32校验和值。

例如:

代码语言:javascript
复制
ABC|2|20130115150327|
1|1234567890123456|1234|20130109204710|21130109204710|
2|6543210987654321|1234|20130110043658|21130110043658|
1A345C7D

关于SuperCSV在这种情况下的能力,我有几个问题。

  • 它允许您根据不同的定义验证不同的行吗,比如头记录的行和数据记录的行?
  • 它是否允许您验证分隔符(在这种情况下是管道‘be’)必须附加到行的末尾?
  • 是否有或有人编写过验证十六进制值的CellProcessor?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 03:12:25

  • 它允许您根据不同的定义验证不同的行吗,比如头记录的行和数据记录的行?

是。通常,使用不使用getHeader()的CellProcessors读取标头,但是没有什么可以阻止您将标题作为普通行来读取,而read()使用CellProcessors。每次对read()的调用都允许您传递CellProcessors,因此您可以使用3个不同的CellProcessor数组处理/验证头、数据行和校验和。

  • 它是否允许您验证分隔符(在这种情况下是管道‘be’)必须附加到行的末尾?

在使用|作为分隔符时,最后一列将被视为空列(null)。这意味着用于读取标头的CellProcessor数组必须有4个元素(或6个用于数据行),否则将得到一个异常,即列数与单元处理器的数量不匹配。通过在最后放置一个new Equals(null)处理器,您可以从本质上验证该行是否以一个|结尾。

  • 是否有或有人编写过验证十六进制值的CellProcessor?

可以使用现有的单元处理器new StrRegex("[0-9A-F]+")使用正则表达式进行验证。您甚至可以使用StrRegex.registerMessage()为验证错误(例如,“非有效十六进制值”)注册一条人类可读的消息。

如果您想将十六进制解析为一个数字(可能不是,但只是以防万一),那么Super中就没有存在的ParseHex CellProcessor。如果你写一个并提交一个补丁,我将把它包括在即将发布的版本中!取决于数字的大小,也许最好更新ParseLong,使其具有另一个接受基的构造函数(本例中为16)?

我建议保持简单,并使用CsvListReader (您可以使用其他读取器,但您需要定义一个nameMapping数组来为标题、数据和校验行提供列名)如下:

  1. 阅读第一行(我假设第二列是以下数据行的数目?)使用“header”CellProcessor数组。
  2. 使用' data‘CellProcessor数组读取数据行n次(其中n由第2标题列指定)。
  3. 使用“校验和”CellProcessor数组(可能只是一个ParseChecksum())读取校验和。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14328668

复制
相关文章

相似问题

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