【问题标题】:How to change a string delimiter in Ab Initio?如何在 Ab Initio 中更改字符串分隔符?
【发布时间】:2013-03-01 14:27:55
【问题描述】:

在 Ab Initio 图中,我有一个输入文件,其中行中有管道分隔的值。我使用类似的 DML 文件来解析它:

record
  decimal("|",0, maximum_length=19, sign_reserved) v1 = NULL("");
  utf8 string("|", maximum_length=10) v2 = "";
  utf8 string("|", maximum_length=10) v3 = "";
  utf8 string("|", maximum_length=40) v4 = "";
  utf8 string("|", maximum_length=255) v5 = "";
  utf8 string("\n", maximum_length=40) v6 = "";
end

为了在以后与其他数据进行相等比较时,我想让所有这些字符串用管道分隔,所以我需要更改 v6 值。

我尝试通过将输出 DML 更改为此一个简单的 Reformat 来做到这一点,并将转换函数留空:

record
  decimal("|",0, maximum_length=19, sign_reserved) v1 = NULL(""); 
  utf8 string("|", maximum_length=10) v2 = "";
  utf8 string("|", maximum_length=10) v3 = "";
  utf8 string("|", maximum_length=40) v4 = "";
  utf8 string("|", maximum_length=255) v5 = "";
  utf8 string("|", maximum_length=40) v6 = "";
  string(1) newline = "\n";
end

但是,这个在 v6.1 中留下了垃圾字符。后来我需要过滤 v6 值以使其仅包含正确的字符。这个解决方案看起来不太好。

为了避免这些垃圾留在 v6 中,我尝试使用 reinterpret_as、string_concat 和其他方法,但最终没有一个好的解决方案。 v6的分隔符应该怎么简单改?

【问题讨论】:

  • 我已经运行了您的解决方案,但工作正常,o/p 文件中没有插入垃圾字符。如果您已经有垃圾字符,请检查您的输入。如果是这样,那么您必须根据获得该字符的概率对数据进行适当的清理。

标签: ab-initio


【解决方案1】:

A == B 将 A 的值与 B 的值进行比较。无论 A 和 B 是否具有相同的分隔符,比较都会返回相同的结果。如果您确实需要更改字段的分隔符,那么您建议的 Reformat 方法是正确的。如果您看到 v6 值中出现垃圾,则表示 v6 中有垃圾进入。

更广泛地说,Stack Overflow 不是讨论 Ab Initio 的合适场所。您最好将问题提交给 Ab Initio 支持人员或通过 GDE 访问的专用 Ab Initio 论坛。该论坛由众多 Ab Initio 用户和员工监控,您几乎可以得到及时响应。

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2014-03-04
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多