根据记录集验证文件

时间:2016-11-26 14:30:07

标签: java regex

我的文件有多组记录。

示例中的多组记录如下所示

X---Header
K
L
M
Z---Footer
X---Header
K
L
M
Z---Footer

K,L和M是信息记录。

当我在文件中只有一组指令时,我就像这样验证它们

首先阅读记录数,然后逐一验证。

if recordsno = 1

   input.record.match(^[X].*$)

else if recordno = 2

   input.record.match(^[Z].*$)

else

   input.record.match(^[K|L|M].*$)

如果任何记录不匹配,我拒绝该记录。单组指令工作正常。我正在使用java在etl中执行此活动。

但现在我期待多组指令。所以在这种情况下如何验证这一点。请提出任何建议,以便我可以在我现有的代码中添加更多代码来验证这种多组指令。

强制性的东西是..Header应该从X开始,页脚用Z开头,并且在记录之间只有K或L或M.所以如果有任何记录与这种格式不匹配我拒绝该文件。< / p>

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:3)

根据您在问题中提出的一般要求,我相信您应该使用本网站JsaPar - library links上提到的Java库之一,而不是尝试使用正则表达式解决此问题。

有一些真正优秀的Java库可以满足您的需求。

这可能不是你问题的直接答案,但那是因为问题是(对我而言)实际上需要解决/完成的问题过于宽泛。

只需查看BeanIO,FlatWorm,JsaPar,EasyBatch,JFFP等文档。

为了对您的问题得到更多反应(或更好的反应),请尝试详细描述记录中包含的内容以及如何检测它们(使它们独特的原因是什么?)。您可以通过指定(或必须基于要求)解决问题的方式来改进您的问题:是否允许使用外部库?仅使用正则表达式是强制性的吗?是否有任何速度/内存使用要求,等等。

我认为用户WiktorStribiżew给出的答案是正确的:“我可以分享的是一个暗示,当你有这么多要求时,你不应该依赖唯一的正则表达式。”我只能承认这一点。

祝你好运!