如何在导入包含中间空白行的平面文件时删除空格?

Lok*_*i70 4 sql ssis

我有一个非常简单的文本文件,其中包含两个逗号分隔值,大约100行.此文件由自动进程(我无法控制)创建,我通过SSIS将此文件导入SQL.

我的工作非常好,除非文件中有空行.通过这个,我的意思是它完全是空白的 - 没有逗号或其他字符.如果在文件中存在,则直接在其后面的记录将在导入的值之前导入两个空格.

例如,如果文本行包含此"ABC,123",则导入的SQL值将为第一列的"ABC".我试图通过使用带有TRIM语句的派生列来删除它,但这没有任何效果.REPLACE功能也不起作用.真正奇怪的是,如果我在数据流Destination之前直接添加数据查看器,则该值看起来很好.我甚至添加了星号,以便我可以"看到"空格,如果它们存在,像这样:

"*" + REPLACE([Column 0]," ","") + "*"
Run Code Online (Sandbox Code Playgroud)

这是一个非常烦人的问题,我非常感谢任何建议.谢谢!

小智 9

这是一种方法.您可以Script Component数据流任务中使用转换来清理数据.

  • 这是一个示例文件,表示与您的问题类似的数据.注意第二行有两个空格而没有实际数据.

有问题的文件

  • 使用平面文件源和OLE DB目标将文件直接导入表时,在导入文件的第二行之前存在空白问题.

无效数据

  • 要解决此问题,必须在平面文件和OLE DB目标之间引入脚本组件转换.拖放脚本组件时,请选择" 转换".

转型

  • 您的数据流任务看起来像这样.

数据流任务

  • 双击脚本组件以打开脚本转换编辑器.在"输入"列上,选择要从文件中读取的第一列.在这种情况下,列是Name.

输入列

  • 在"输入和输出"部分,创建一个名为CleansedData数据类型的新列string.这个新列将保持没有空格的干净输出.

输入和输出

  • 在"脚本"部分,单击"编辑脚本"按钮以显示"脚本"编辑器.

脚本

  • 在脚本编辑器中,更改方法中的代码,Input0_ProcessInputRow如下所示.此代码用空白文本替换回车符+换行符,然后修剪文本周围的任何空格.

脚本代码:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Row.CleansedData = Row.Name.Replace(@"\r\n", string.Empty).Trim();
}
Run Code Online (Sandbox Code Playgroud)

脚本代码

  • 现在,在OLE DB目标中,使用CleansedData列映射部分中的新列替换旧列.

  • 进行上述更改后,将对包含空格的同一文件执行包.这次在第二行之前没有插入空格.

希望有所帮助.

干净的数据