【发布时间】:2010-12-23 00:06:35
【问题描述】:
在 SSIS 中从平面文件中去除字符的最佳方法是什么?就我而言,我需要在处理之前从文件中删除所有引号。
编辑:
如何针对 SSIS 中的某些文件运行可执行文件?我可以以某种方式使用源连接作为输入,还是必须将文件名作为参数传递?
【问题讨论】:
标签: parsing ssis flat-file strip
在 SSIS 中从平面文件中去除字符的最佳方法是什么?就我而言,我需要在处理之前从文件中删除所有引号。
编辑:
如何针对 SSIS 中的某些文件运行可执行文件?我可以以某种方式使用源连接作为输入,还是必须将文件名作为参数传递?
【问题讨论】:
标签: parsing ssis flat-file strip
如果我正确理解您的问题,您想从文本文件中的任何列值中删除任何引号?如果是这种情况,您将使用派生列转换。您可以在派生列名称下拉列表中选择替换“column_name”。然后,您将使用以下代码填充表达式属性: REPLACE("\"", [column_name], "")
希望这会有所帮助。
【讨论】:
最简单的方法是创建一个“转换”脚本组件并使用代码去除引号。
【讨论】:
unclepaul84 和 Ryan Fonnetts 的解决方案都可以,但我个人更倾向于 unclepaul 的解决方案,因为我发现我知道有多个文件需要去掉引号,我可以为每个文件使用相同的转换代码(这很好)。
【讨论】:
我确实使用了Derived Column Transformation
例如如果我想在 ssis 中使用派生列替换 ', " " , #, 我会写
Replace(Replace(REPLACE(name,"$"," "), "'", " ")," ","")
但我觉得,如果需要过滤掉1或2列,那么这种方法很好。如果涉及更多,请继续Script task
【讨论】:
由于您必须对文件中的所有字段执行此操作,因此我建议将其作为流程的第一步,而不是作为转换工作流程中的操作。
您可以编写自己的 .NET 脚本并将其嵌入到脚本任务中。 您还可以通过执行流程任务调用第三方工具或组件。
例如,如果您可以访问 cygwin unix 命令行,则应该执行以下操作:
sed s/\"//g data1.txt
您可以通过上述“执行流程任务”组件调用可执行文件,并且可以通过在组件属性上设置表达式来参数化其输入。这些表达式可以基于可能通过配置文件配置的输入变量。 (这只是 SSIS 提供的实现此类目标的众多方法之一)
【讨论】:
这些是解决方案,但我相信平面文件连接管理器中内置了更简单的功能。
在第一个选项卡“常规”中,您会在“格式”部分下找到第一个文本框,称为“文本限定符”。在此处输入一个双引号(如果所有列都用单引号括起来,则输入一个单引号)并点击预览。
这应该可以解决您的问题!
【讨论】: