如何在管道分隔文件中将管道作为数据处理

时间:2019-02-21 21:19:42

标签: sql sql-server ssis etl flat-file

我正在尝试解决csv数据如下所示的问题:

A|B|C 
"Jon"|"PR | RP"|"MN"
"Pam | Map"|"Ecom"|"unity"
"What"|"is"this" happening"|"?"

也就是说,它是用竖线分隔的,并带有引号作为文本限定符,但是在数据值中也带有竖线和引号。我已经尝试过

根据评论进行更新

我尝试选择|作为分隔符,选择"作为文本限定符,但是当尝试将数据导入OLEDB Destination时,出现以下错误:

  

找不到列B的列定界符

2 个答案:

答案 0 :(得分:2)

您必须在Column Delimiter内将|属性更改为Text Qualifier(竖线),并将"属性更改为Flat File Connection Manager

enter image description here

enter image description here

如果这些仍然不起作用,则平面文件源中有一些不良行,必须使用错误输出来处理:

答案 1 :(得分:0)

实际上,我最终写了一个c锋利的脚本来删除开头和结尾的引号,并在SSIS中将列定界符设置为引用管道引号(“ |”)。代码如下:

public void Main()
    {
        String folderSource = "path";
        String folderTarget = "path";

        foreach (string file in System.IO.Directory.GetFiles(folderSource))
        {
            String targetfilepath = folderTarget + System.IO.Path.GetFileName(file);
            System.IO.File.Delete(targetfilepath);
            int icount = 1;
            foreach (String row in System.IO.File.ReadAllLines(file))
            {
                if (icount == 1)
                {
                    System.IO.File.AppendAllText(targetfilepath, row.Replace("|", "\"|\""));

                }
                else
                {

                    System.IO.File.AppendAllText(targetfilepath, row.Substring(1, row.Length - 2));
                }
                icount = icount + 1;
                System.IO.File.AppendAllText(targetfilepath, Environment.NewLine);
            }
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }