【问题标题】:ESQL for splitting a string into mulitple values用于将字符串拆分为多个值的 ESQL
【发布时间】:2018-01-03 01:00:33
【问题描述】:

以下输入xml字段需要6个字符的子字符串,每6个字符应拆分并保存在输出的选项字段中。

Input: 
<feature>124414500045563879</feature>

output:
<option>124414</option>
<option>500045</option>
<option>563879</option>

IIB ESQL 中是否有任何标记器功能可以实现上述结果。

【问题讨论】:

    标签: messagebroker ibm-integration-bus extended-sql


    【解决方案1】:

    另一种解决方案可能是将特征的值作为比特流,从中构建新的 BLOB 消息,并使用描述该值中标记的消息定义对其进行重新解析。重新解析后,可以进一步处理新的逻辑消息。

    【讨论】:

    • 非常好的答案。由于设置和调用解析器的性能成本,我通常对少量元素使用循环,比如少于 20 个,见上文,但是可能有很多元素为 DFDL 解析器创建 MessageModel 可能会显着减少开销。请记住,ESQL 的每一行都是对底层解释器的调用。
    【解决方案2】:

    据我所知,ESQL 中没有字符串标记器函数。

    但是您可以使用以下过程作为实现目标的基础。该方法将 Delim 上的 S 拆分为 Env 中的数组 (Environment.Split.Array[]) 并在重新填充之前删除 Environment.Split。

    在您的情况下,您不需要 Delim,您应该在 Substring 部分使用固定长度。

    CREATE PROCEDURE Split (IN S CHARACTER, IN Env REFERENCE, IN Delim CHARACTER) 
    BEGIN 
       DECLARE P INTEGER; 
       DECLARE Idx INTEGER 1; 
    
       SET Env.Split = NULL; 
    
       REPEAT 
          SET P = POSITION(Delim IN S); 
          IF P = 0 THEN 
             SET Env.Split.Array[Idx] = S; 
          ELSE 
             SET Env.Split.Array[Idx] = LEFT(S, P - 1); 
             SET S = SUBSTRING(S FROM P + LENGTH(Delim)); 
             SET Idx = Idx + 1; 
          END IF; 
      UNTIL P = 0    
      END REPEAT;    
    END;
    

    来源:http://www.mqseries.net/phpBB2/viewtopic.php?p=97845&

    【讨论】:

    • 谢谢文森特。我会尝试上述方法。
    • 我遵循上述方法并确定了输出。
    • @ranaa 很高兴读到! (:如果效果很好,您可以将此答案设置为已接受。
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2010-09-19
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多