首页 > 解决方案 > 在 Informatica 中将平面文件字符串拆分为多列

问题描述

我有一个包含 1 列 (ColumnA) 的平面文件 (csv),其数据格式为 ==> 100-000500-10-40000-000-200-600-000

我需要将它分成 8 列(与连字符相邻的值)并连接 2,4 和 5 个拆分的子值。如何在表达式转换中执行此操作?我尝试了以下但没有帮助,表格将这些字段加载为空白。

变量端口 1:SUBSTR(ColumnA,3,6) 变量端口 2:SUBSTR(ColumnA,12,5) 变量端口 3:SUBSTR(ColumnA,18,3)

然后我制作了每三个的输出端口 V_ACCOUNT_SEG2_CODE、V_ACCOUNT_SEG4_CODE、V_ACCOUNT_SEG5_CODE,然后像下面这样连接:

最终变量端口:RTRIM(V_ACCOUNT_SEG2_CODE||'-'||V_ACCOUNT_SEG4_CODE||'-'||V_ACCOUNT_SEG5_CODE,'-')。

有人可以建议代码有什么问题,什么是正确的工作代码?我正在从 ColumnA(csv 平面文件)获取数据到我的目标表(Oracle),但这些额外的列是空的。

我的表情转换在这里

标签: splitstring-concatenationinformaticainformatica-powercenterflatfilesource

解决方案


您需要使用 SUBSTR 和 INSTR 的组合。您不应该使用硬编码值,因为它们可能会根据您的数据而改变。可能这就是您的映射中正在发生的事情。
v_col1= SUBSTR (data_col,1,instr(data_col,'-')-1 ) v_col2 = SUBSTR (data_col,instr(data_col,'-')+1, instr(data_col,'-',1,2)-1 ) v_col3 = SUBSTR (data_col,instr(data_col,'-',1,2)+1,instr(data_col,'-',1,3)-1 ) ...
或者,您也可以使用 REGEX,如下所示。但问题是只有当你有一个带有 3 '-' like 的数据时这才有效'abc-defg-hij'。任何其他组合,拆分都不起作用。

v_col1:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',1) v_col2:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',2) v_col3:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',3) ... 或者,您可以将文件数据加载到临时 oracle 表中并使用 regex_substr() 来拆分它们。


推荐阅读