You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多场景数据格式转换处理技术问询(Informatica/Notepad++/Unix/Oracle)

多场景处理含内嵌逗号的CSV文件解决方案

源CSV文件内容:

Cust_Id,Cust_Name,Cust_Address,Cust_Salary
1,Name1,Address,12,Road,40,10000
2,Name2,Addressline,2,15,20000

注:地址列包含内嵌逗号,常规CSV解析逻辑失效,以下为四个场景的针对性处理方案。

场景1:Informatica PowerCenter转换后写入Oracle目标表

操作步骤:

  1. 源配置:将平面文件定义为单字符串列(避免因地址含逗号触发错误列拆分),读取每一行完整内容。
  2. 转换逻辑:使用表达式转换工具,通过正则拆分字段:
    • Cust_Id:REGEXP_SUBSTR(INPUT_ROW, '^[^,]+', 1, 1)
    • Cust_Name:REGEXP_SUBSTR(INPUT_ROW, '^[^,]+,[^,]+', 1, 1, ',', 2)
    • Cust_Address:REGEXP_REPLACE(REGEXP_REPLACE(INPUT_ROW, '^[^,]+,[^,]+,', ''), ',[^,]+$', '')
    • Cust_Salary:REGEXP_SUBSTR(INPUT_ROW, '[^,]+$', 1, 1)
  3. 目标配置:连接Oracle目标表,将转换后的4个字段映射到对应表列,执行写入操作。
  4. 最终效果:Oracle表中数据与场景4的期望输出结构一致。

场景2:Notepad++替换指定逗号为竖线(保留地址内逗号)

操作步骤:

  1. 打开源文件,按Ctrl+H调出替换窗口。
  2. 勾选左下角「正则表达式」模式(不勾选「.匹配换行符」)。
  3. 处理数据行:
    • 查找内容:^(\d+),([^,]+),(.*),(\d+)$
    • 替换为:\1|\2|\3|\4
    • 点击「全部替换」,完成所有数据行格式转换。
  4. 处理表头行:
    • 查找内容:(Cust_Name,Cust_Address),(Cust_Salary)
    • 替换为:\1|\2
    • 点击「替换」,修改表头格式。
  5. 期望输出:
Cust_Id,Cust_Name,Cust_Address|Cust_Salary
1|Name1|Address,12,Road,40|10000
2|Name2|Addressline,2,15|20000

场景3:Unix环境实现相同格式转换

方案1:awk命令(适配可变长度地址列)

awk -F ',' 'NR==1 {print $1","$2","$3"|"$4; next} {
    printf "%s|%s|", $1, $2;
    for(i=3; i<=NF-1; i++) {
        printf "%s%s", $i, (i==NF-1 ? "" : ",");
    }
    printf "|%s\n", $NF
}' input.csv

方案2:sed正则替换(简洁高效)

sed -E '1s/(.*),(.*)$/\1|\2/; 2,$s/^([^,]+),([^,]+),(.*),([^,]+)$/\1|\2|\3|\4/' input.csv

两种方案均可输出场景2的期望格式。

场景4:Oracle查询语句拆分源数据为独立列

假设源数据存储在表CUST_SOURCE的RAW_DATA列(每行对应源文件完整行内容),执行以下查询:

SELECT
  REGEXP_SUBSTR(raw_data, '^[^,]+', 1, 1) AS Cust_Id,
  REGEXP_SUBSTR(raw_data, '^[^,]+,[^,]+', 1, 1, ',', 2) AS Cust_Name,
  REGEXP_REPLACE(REGEXP_REPLACE(raw_data, '^[^,]+,[^,]+,', ''), ',[^,]+$', '') AS Address,
  REGEXP_SUBSTR(raw_data, '[^,]+$', 1, 1) AS Salary
FROM CUST_SOURCE
WHERE raw_data NOT LIKE 'Cust_Id%'; -- 过滤表头行

期望输出:

Cust_IdCust_NameAddressSalary
1Name1Address,12,Road,4010000
2Name2Addressline,2,1520000

内容的提问来源于stack exchange,提问作者Vivek Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:40:42