Split 在Informatica中将平面文件字符串拆分为多列

Split 在Informatica中将平面文件字符串拆分为多列,split,string-concatenation,informatica,informatica-powercenter,flatfilesource,Split,String Concatenation,Informatica,Informatica Powercenter,Flatfilesource,我有一个平面文件csv,其中有一列ColumnA,数据格式为==>100-000500-10-40000-000-200-600-000 我需要将其拆分为8列值,与连字符相邻,并连接2、4和5个拆分的子值。如何在表达式转换中执行此操作?我尝试了以下操作,但没有帮助,表正在将这些字段加载为空白 变量端口1:子列A,3,6 变量端口2:子列A,12,5 变量端口3:子列A,18,3 然后我制作了三个输出端口,分别是V_ACCOUNT_SEG2_CODE、V_ACCOUNT_SEG4_CODE、V_A

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

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

变量端口1:子列A,3,6 变量端口2:子列A,12,5 变量端口3:子列A,18,3

然后我制作了三个输出端口,分别是V_ACCOUNT_SEG2_CODE、V_ACCOUNT_SEG4_CODE、V_ACCOUNT_SEG5_CODE,然后连接如下:

最终变量端口:RTRIMV|U ACCOUNT|SEG2|U CODE|“-”V|U ACCOUNT|SEG4|U CODE|“-”V|U ACCOUNT|SEG5|U CODE“-”

有人能告诉我代码有什么问题,正确的工作代码是什么吗?我正在将数据从一个csv平面文件获取到我的目标表Oracle,但这些额外的列显示为null


您需要使用SUBSTR和INSTR的组合。您不应该使用硬代码值,因为它们可以根据您的数据进行更改。可能这就是您的映射中正在发生的情况。 v_col1=子序列数据列,1,指令数据列“-”-1 v_col2=子序列数据_col,instrdata_col,'-'+1,instrdata_col,'-',1,2-1 v_col3=子序列数据_col,instrdata_col',-',1,2+1,instrdata_col',-',1,3-1 ... 或者,您也可以像下面一样使用正则表达式。但问题是,只有当您的数据具有3'-'时,如“abc defg hij”,这才有效。任何其他组合,拆分都不起作用

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

您可以为平面文件创建源转换,并使用连字符作为分隔符。这将为您创建列。然后只需在表达式转换中连接适当的列即可。

更高效的正则表达式:

v_col1:= REG_EXTRACT(data_col,'([^-]+)-([^-])-([^-]+)',1)
v_col2:= REG_EXTRACT(data_col,'([^-]+)-([^-])-([^-]+)',2)
v_col3:= REG_EXTRACT(data_col,'([^-]+)-([^-])-([^-]+)',3)
...

如果CSV中只有A列,您可以将CSV的分隔符设置为连字符,Informatica将在8列中为您解析它。如果它不是唯一的列,您可以在两个映射中完成:一个映射用于在另一个CSV中提取该列,另一个映射使用连字符作为分隔符。另一个解决方案是假设在Unix上运行Shell命令,在映射开始之前将连字符更改为文件的分隔符:tr'-'',Hi Koushik,谢谢您的输入。我按照你在这里说的方式使用REGEX,但它只返回了第一次出现,而不是所有的8。你能告诉我我做错了什么吗。我的数据是假设100-0042*--16810-->,我得到的COL1是100,而不是其他7个字段中的其他7个数字。例如,REG_EXTRACTGL_String,“[^-]*,?[^-]*,?[^-]*”,2在这个例子中没有给我0042,但是空值-类似地,除了第一个字段之外的其他7个字段都是空值。我将进行一些研究和开发,然后返回。谢谢Koushik,如果REGEX的工作时间不超过3'-',我可以按照您的建议在Infa中使用SUBSTR/INSTR吗?在这种情况下,8个值的格式是什么?就像你为前三个付出的那样?v_col1=SUBSTR data_col,1,instrdata_col,'-'-1 v_col2=SUBSTR data_col,instrdata_col,'-'+1,instrdata_col,'-',1,2-1 v_col3=SUBSTR data_col,instrdata_col,'-',1,2+1,instrdata_col,'-',1,3-1 INSTR/SUBSTR将始终工作。即使您有可变数量的分隔符。“不可用”将为空。欢迎使用堆栈溢出。考虑添加一个解释为什么你的正则表达式更有效率。能够自我解释的答案也是更好的长期答案,因为它们有助于其他人理解你的想法和答案。