【问题标题】:How to deal with pipe as data in pipe delimited file如何将管道作为管道分隔文件中的数据处理
【发布时间】:2019-07-15 21:59:36
【问题描述】:

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

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

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

根据 cmets 更新

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

找不到列 B 的列分隔符

【问题讨论】:

  • 如果您的数据中同时包含引号和竖线,是时候更改分隔符和文本标识符(或至少更改文本标识符)了。
  • 这不是有效的 CSV 文件。
  • 如果选择" 作为文本限定符并选择| 作为列分隔符会怎样?
  • 最后一行的正确转义是"What"|"is ""this"" happening"|"?"
  • Hadi,当我这样做时,虽然在平面文件连接管理器中,它可以预览我想要的列,但是当我将它导出到 OLE DB 目标时,它说找不到列分隔符对于 B 列。

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


【解决方案1】:

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

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

【讨论】:

  • Hadi,这就是我一直在做的,但问题是当你将它连接到 OLE DB 目标时它会失败
  • @Yogita 我认为有坏行,你应该使用平面文件源的错误输出来检索这些行
  • @yogita 检查以下链接stackoverflow.com/questions/5582390/…
  • @yogita 实现此目的的唯一方法是如上所述,设置分隔符并使用错误输出选项。
  • 不幸的是,设置分隔符和使用错误输出对我来说并不奏效。
【解决方案2】:

实际上,我最终编写了一个升 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 2011-06-14
    • 2018-10-23
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多