2

在 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.6 中留下了垃圾字符。后来我需要过滤 v6 值以使其仅包含正确的字符。这个解决方案似乎并不整洁。

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

4

1 回答 1

3

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

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

于 2013-09-20T19:27:44.937 回答