- 它是否允许您针对不同的定义验证不同的行,即一个用于标题记录,一个用于数据记录?
是的。通常,您会getHeader()
使用不使用 CellProcessors 来读取标题,但没有什么可以阻止您read()
使用 CellProcessors 将标题作为普通行读取。每次调用都read()
允许您传入 CellProcessor,因此您可以使用 3 个不同的 CellProcessor 数组以不同方式处理/验证标题、数据行和校验和。
- 它是否允许您验证分隔符(在这种情况下为管道“|”)必须附加到行尾?
当您|
用作分隔符时,最后一列将被视为空列 ( null
)。这意味着用于读取标题的 CellProcessor 数组必须有 4 个元素(或 6 个用于数据行),否则您将收到异常,指出列数与单元处理器的数量不匹配。通过在末尾放置一个new Equals(null)
处理器,您基本上可以验证该行是否以|
.
- 是否有或有人编写过验证十六进制值的 CellProcessor?
您可以使用现有的单元处理器new StrRegex("[0-9A-F]+")
使用正则表达式进行验证。您甚至可以使用StrRegex.registerMessage() 为验证错误注册一条人类可读的消息(例如“不是有效的十六进制值”)。
如果您想将十六进制解析为数字(可能不是,但以防万一),那么ParseHex
Super CSV 中没有现有的 CellProcessor。如果您编写一个并提交一个补丁,我会将它包含在即将发布的版本中!根据数字的大小,也许最好更新ParseLong以拥有另一个接受基数(在本例中为 16)的构造函数?
我建议保持简单并使用CsvListReader(您可以使用其他阅读器,但您需要定义一个 nameMapping 数组来为标题、数据和校验和行提供列名),如下所示:
使用 'header' CellProcessor 数组读取第一行(我假设第二列是后面的数据行数?)。
使用“数据”CellProcessor 数组读取数据行n次(其中n由第二个标题列给出)。
使用“校验和”CellProcessor 数组(可能只是一个ParseChecksum()
)读取校验和。