【问题标题】:How to create SSIS script task to remove the CR LF from a flat file如何创建 SSIS 脚本任务以从平面文件中删除 CR LF
【发布时间】:2018-10-01 10:01:30
【问题描述】:

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

【问题讨论】:

  • 我会查看在文件末尾创建空行的生成片段并修复它,使其不会创建空行
  • 文件保存后是否绝对需要删除空白行?以前这样做会更容易。
  • 我已经遵循了有关如何在写入文件之前防止出现空白行的建议,但这些建议都对我没有用。因为每一行都需要有一个换行符,所以您保存的文件中总是会出现一个空白行。

标签: c# ssis ssis-2012 flat-file


【解决方案1】:

我希望这能在我从臀部射击时起作用:

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

C#

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

【讨论】:

    【解决方案2】:

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

    在拆分转换编辑器中,指定一个带有类似条件的布尔表达式

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

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


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

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

    如果您还想删除最后一个换行符,请使用上面的代码使用此模式:@"^\s+$[\r\n]*|[\r\n]$"

    【讨论】:

    • 这是我已经尝试过的解决方案之一。当您设置目标目标文件时,您将回到您开始的位置,因为输出中定义了 CR LF。所以你仍然会在输出文件中得到空白行。
    • 您是否也尝试过不同的长度,例如LEN([Col 1]) > 2
    • 是的,问题不在于拆分,而是将文件保存到平面文件目标位置,在那里您总是会得到尾随的空行。我会看看你的脚本任务,谢谢你的帮助。
    • @user7593937 我明白了。我已经更新了建议的模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多