如何创建SSIS脚本任务以从平面文件中删除CR LF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建SSIS脚本任务以从平面文件中删除CR LF相关的知识,希望对你有一定的参考价值。

我们有一个SSIS作业,它从数据库获取数据并将其输出到csv文件并将其保存到文件共享。我们生成的csv中的最后一行是一个空行,该文件的使用者希望将其删除。在我们将文件写入目录之后,我需要弄清楚如何修改文件并删除最后一个空白行。我相信你可以在脚本任务中执行此操作,但我尝试过的所有内容都失败了,包括VB和C#。有没有人想出如何做这样的事情?

答案

我希望这是有效的,因为我从臀部拍摄:

这应该删除最后一个回车和换行。

C#

string s = System.IO.File.ReadAllText([filePath]); 
s=s.Substring(1,s.Length-2); //CRLF
System.IO.File.WriteAllText([filePath],s);
另一答案

您可以在数据流管道上的源和目标之间使用Conditional Split Transformation来删除空行。

enter image description here

在“拆分变换编辑器”中,使用条件类似指定布尔表达式

LEN([Col 1]) > 0 && LEN([Col 2]) > 0 ...

enter image description here

额外奖励:如果输出文件中还有错误的数据,您可能希望过滤不同的长度(如屏幕截图所示):Ref


如果这仍然不起作用,我建议尝试使用C#脚本任务:

try
{
    string input = System.IO.File.ReadAllText("path");
    string output = System.Text.RegularExpressions.Regex.Replace(input, @"^s+$[
]*", "", System.Text.RegularExpressions.RegexOptions.Multiline);
    System.IO.File.WriteAllText("path", output);
}
catch (Exception e)
{
    //Log..
    Dts.TaskResult = (int)ScriptResults.Failure;
}

如果您还想删除最后一个换行符,请使用以上代码替换:@"^s+$[ ]*|[ ]$"

以上是关于如何创建SSIS脚本任务以从平面文件中删除CR LF的主要内容,如果未能解决你的问题,请参考以下文章

测量 SSIS 数据流的进度

未分配 SSIS 脚本任务变量值

如何使用 SSIS 从平面文件中删除重复的行?

从 SQL 代理运行时 SSIS 脚本任务失败

SSIS 脚本任务使用通配符删除文件

SSIS 任务数据流 - 将平面时间值 HHMMSS 转换为 MSSql Time(7) 字段