遇到我收到LF作为EOL的文本文件的问题。有时他们发送文件与CRLF作为EOL。有没有人对如何使SSIS使用任何一个作为EOL有任何好的想法?
这是一个非常简单的转换操作,使用notepad ++将其更改为我需要的,但是,它是手动的,我希望它是自动的。
谢谢,
EDIT。我在数据流之前使用Swiss File Knife修复了它(但并不完美)。
答案 0 :(得分:7)
如果行终止符总是一个或另一个,我建议设置2个文件连接管理器,一个带有“CRLF”行分隔符,另一个带有“LF”行分隔符。
然后,创建一个布尔包变量(类似于@IsCrLf)并将其作为包的范围。在SSIS包中迈出第Script Task步,在其中读入文件流,并尝试发现行终止符(基于您在流中找到的内容)。相应地设置变量的值。
然后,在控制流中的脚本任务之后,创建2个单独的数据流(每个文件连接管理器一个)并在连接器上使用Precedence Constraint设置为“表达式和约束”以指定哪个数据流使用,取决于@IsCrLf变量的值。
下面建议的控制流程示例。
答案 1 :(得分:1)
在文件源之后将REPLACE操作更改为LF的派生列如何?
答案 2 :(得分:0)
我获得OP对Swiss File Knife的投票。
但是,我有一堆运行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>