什么是验证和解析Pentaho水壶复杂领域的最佳方法?

问题描述:

验证连续字段的最佳方法是什么?如果无效,请将其更正为正确的形式?什么是验证和解析Pentaho水壶复杂领域的最佳方法?

最简单的例子是检查电话号码字段(可以不同格式 - > 111-111-1111,(111)111-1111等),我们最好想验证这些和标准化为一种形式(可以说:1111111111)。一种方法是使用过滤器行,然后使用正则表达式,或者我们可以使用数据验证器。但是这只会告诉我们什么样的数据是无效的,但实际上并没有为我们格式化。然后,我们可以使用Javascript修改的值步骤来编写一个js脚本来执行此操作。但我猜测有一个更好的方法(或者我没有遇到过的内置集成)可以做这些基本的验证。还是建议只将包含无效字段的行转储到单独的csv文件中,然后使用脚本分别解析它?

+0

我不会在你的发言后面发表*但这只会告诉我们什么样的数据是无效的,但实际上并没有为我们格式化*实际上,当使用正则表达式和组时,你已经完成了一半的格式化操作,确定了您的逻辑组件。在你上面的情况下,你将有三组数字,你将连接成一个。你可以编辑你的问题来增加两三个例子吗?我认为这会使所需变革的复杂性更加明确,并且有人可能会提出具体的建议。 – 2014-10-18 09:47:41

+0

这看起来像一个清晰的正则表达式应用程序。如上所述,我将采用捕获组的正则表达式步骤,然后是筛选器行步骤以筛选出不正确的数据,然后您可以以任何您想要的格式收集组(字符串操作,计算器,用户定义的java表达式,等等。) – nsousa 2014-10-20 08:54:42

天儿真好

我使用优迈“的字符串替换”来处理这种情况下

可以累计申请规则,从单一的步骤中的字符串消除不良焦 - 这是很容易使用单个字符修复,就像您所描述的一样,最重要的是,它也允许您基于正则表达式进行搜索 - 在一个步骤中,您已经记录了您的标准化并在您的案例中生成了清理输出

,我会创建两个'规则'来取代()没什么 - 但是,-是有点棘手;您需要一个规则来删除单个字符,因此您需要知道单个数据字段中的最大数量-,然后将这多行添加到'替换字符串'步骤中

如果这不合意,考虑“用户定义的Java表达”和replace一个呼叫,例如:((t0 != null) ? t0.replace("-","") : t0)

正如我所说,每个“修复”是按顺序施加 - 的In stream field是输入字段名,而Outstream field是左空指示迪修改字段本身 - 这里是一个更复杂的例子,其中i搜索正则表达式,并没有取代他们,逃避的情况下我逃脱"双引号:

In stream field Out stream field use RegEx Search           Replace with 
sc_srcuri       N   {Internal.Transformation.Filename.Directory}     
re_s_sciname      Y   ["]            \\" 
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   [*]               
re_s_sciname      Y   \s*$               
re_s_sciname      Y   ^\s*               

通知我正在移除多达三个“从这个特定的字符串中删除'控制码​​[\x08]