【发布时间】: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