Visual studio 2015 在SSIS上解析非结构化平面文件

Visual studio 2015 在SSIS上解析非结构化平面文件,visual-studio-2015,ssis,script-task,flatfilesource,Visual Studio 2015,Ssis,Script Task,Flatfilesource,我在解析非结构化文本文件时遇到问题。我试图用DT_STR数据类型将所有内容上传到一列中,但由于文件中有像“=”这样的特殊字符,因此会出现错误。我尝试使用DT_文本数据类型,效果很好。但是我不能对列执行任何操作。我需要删除该列中的空行,这可以通过“条件拆分”完成。但条件是: [column 0]!="" 不工作并引发以下错误: 标题:Microsoft Visual Studio 数据流任务[Conditional Split[32]]出错:数据类型“DT_TEXT”和“DT_WSTR”与二进制

我在解析非结构化文本文件时遇到问题。我试图用DT_STR数据类型将所有内容上传到一列中,但由于文件中有像“=”这样的特殊字符,因此会出现错误。我尝试使用DT_文本数据类型,效果很好。但是我不能对列执行任何操作。我需要删除该列中的空行,这可以通过“条件拆分”完成。但条件是:

[column 0]!=""
不工作并引发以下错误:

标题:Microsoft Visual Studio 数据流任务[Conditional Split[32]]出错:数据类型“DT_TEXT”和“DT_WSTR”与二进制运算符“!=”不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用转换运算符显式转换一个或两个操作数

数据流任务[Conditional Split[32]]出错:尝试设置二进制操作“[列0]!=”的结果类型失败,错误代码为0xC0047080

数据流任务[条件拆分[32]]处出错:计算表达式“[列0]!=”失败,错误代码为0xC0047084。表达式可能存在在解析时无法检测到的错误,例如被零除,或者可能存在内存不足错误

数据流任务[Conditional Split[32]]处出错:“Conditional Split.Outputs[案例1]”上的表达式“[Column 0]!=”无效

数据流任务[Conditional Split[32]]处出错:未能在“Conditional Split.Outputs[Case 1]”上设置属性“Expression”


其他信息:

来自HRESULT的异常:0xC0204006(Microsoft.SqlServer.DTSPipelineWrap)


按钮:

好啊 我以前用c#脚本进行过解析。但现在我需要避免编码。任何关于如何解析此文件的想法都将不胜感激。谢谢

让我们把它分解一下

数据类型“DT_TEXT”和“DT_WSTR”与二进制运算符“!=”不兼容

您有一个表达式
[列0]=“
空字符串
是DT\U WSTR,
[列0]
是DT\U文本数据类型。如错误消息所示,您无法测试这些类型之间是否存在不相等条件

我将考虑将列0转换为DT_WSTR,或者简单地检查长度<代码>长度([列0])>0

SSIS方式 更大的问题是,您的文件不是“非结构化文本文件”。它非常有条理。列标题位于第3行(基于1的计数),数据从第5行开始。从这里看,数据本身的宽度是固定的


在SSIS中如何处理这一点?创建类型为Ragged Right的平面文件连接管理器。指示没有标题列,并跳过前4行/第5行中的数据开始。通过指定宽度来创建列,现在您的数据流更简单,包运行速度更快。

等号不是特殊字符,因此我不知道为什么它不将整个数据作为字符串。当我将其作为字符串给出时,错误显示在第4行。第4行只有等号signsLEN([column0])>0看起来不错,但不起作用。错误为:[条件拆分[2]]错误:“条件拆分.输出[删除空行]”上的表达式“LEN([Column 0])>0”的计算结果为空,但“条件拆分”需要布尔结果。修改输出上的错误行配置,将此结果视为False(忽略失败),或将此行重定向到错误输出(重定向行)。对于条件拆分,表达式结果必须为布尔值。空表达式结果是错误的。另外,我需要第一行的数据,而不是第4行的数据。我需要STN的名称和日期。我试过使用DT_WSTR。它显示了与DT_STR相同的错误。我在问题中发布的错误是“!=”不适用于数据类型DT_TEXT和DT_WSTR。这并不意味着它可以与DT_WSTR数据类型一起工作。我同意解决方案是正确配置源代码。如果您需要名称和STN,则只使用这两列创建第二个连接以提取这些值。对于条件拆分,请改为使用=0并切换拆分。我已使用ragged right和平面文件连接管理器的高级属性中为每列指定的inputcolumnwidth导入了文件。不规则的右侧自动删除空行。这样我就把所有的柱子分开了。我使用带有子字符串表达式的派生列添加了STN和Date。找不到比这更好的方法了。