8

遇到一个问题,我收到一个以 LF 作为 EOL 的文本文件。有时他们会发送带有 CRLF 的文件作为 EOL。有没有人对我如何让 SSIS 使用其中任何一个作为 EOL 有任何好主意?

这是一个非常简单的转换操作,使用记事本++ 可以将其更改为我需要的任何内容,但是,它是手动的,我希望它是自动的。

谢谢,

编辑。我在数据流之前使用Swiss File Knife修复了它(但不完美)。

4

3 回答 3

7

如果行终止符总是一个或另一个,我建议设置 2 个文件连接管理器,一个带有“CRLF”行分隔符,另一个带有“LF”行分隔符。

然后,创建一个布尔包变量(类似于@IsCrLf)并将其范围限定为您的包。将 SSIS 包中的第一步设为Script Task,您在其中读取文件流,并尝试发现行终止符是什么(基于您在流中找到的内容)。相应地设置变量的值。

然后,在控制流中的脚本任务之后,创建 2 个单独的数据流(每个文件连接管理器一个)并在连接器上使用设置为“表达式和约束”的优先约束来指定要使用的数据流,具体取决于@IsCrLf 变量的值。

下面建议的控制流示例。

示例 SSIS 控制流

于 2012-05-28T13:27:16.667 回答
1

在文件源之后使用 REPLACE 操作将 CRLF 更改为 LF 的派生列怎么样?

于 2012-05-24T16:02:42.523 回答
0

我支持 OP 对瑞士锉刀的投票。

为了整合它,我必须添加一个执行流程任务: 执行程序

但是,我有一堆运行 For-Each-File 循环的包,所以我需要一些 BIML - 也许这会帮助下一个灵魂。

<ExecuteProcess Name="(EXE) Convert crlf for <#= tableName #>"
              Executable="<#= myExeFolder #>sfk.exe">
  <Expressions>
    <Expression PropertyName="Arguments">
      "crlf-to-lf " +  @[User::sFullFilePath]
    </Expression>
  </Expressions>
</ExecuteProcess>
于 2016-12-02T15:20:36.550 回答