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

问题描述 投票:2回答:2

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

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

也就是说,它是由管道分隔的,并且引号为文本限定符,但它在数据值中也有管道和引号。我已经尝试过了

根据评论进行更新

我试图选择|作为分隔符和"作为文本限定符,但在尝试将数据导入OLEDB目标时,我收到以下错误:

找不到列B的列分隔符

sql sql-server ssis etl flat-file
2个回答
2
投票

您必须将Column Delimiter属性更改为|(垂直条),将Text Qualifier属性更改为"中的Flat File Connection Manager

enter image description here

enter image description here

如果这些仍然不起作用,那么在平面文件源中有一些坏行,您必须使用错误输出处理:


0
投票

我实际上最后编写了一个简单的脚本来删除初始和最后一个引用并设置列分隔符以引用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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.