0

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

[column 0]!=""

不起作用并引发以下错误:

标题:Microsoft Visual Studio

数据流任务 [条件拆分 [32]] 出错:数据类型“DT_TEXT”和“DT_WSTR”与二元运算符“!=”不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用强制转换运算符显式强制转换一个或两个操作数。

数据流任务 [条件拆分 [32]] 出错:尝试设置二元运算“[Column 0] != “”的结果类型失败,错误代码为 0xC0047080。

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

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

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


附加信息:

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


纽扣:

好的

我之前用 c# 脚本进行了解析。但现在我需要避免编码。任何关于如何解析这个文件的想法都值得赞赏。谢谢

4

1 回答 1

1

让我们分解一下

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

您有一个表达式[column 0]!="",空字符串""是 DT_WSTR 并且[column 0]是 DT_TEXT 数据类型。如错误消息所示,您无法测试这些类型之间的不等于条件。

我会考虑将 Column 0 转换为 DT_WSTR 或简单地检查长度。LEN([column 0]) > 0

SSIS 方式

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

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

于 2018-06-07T17:18:10.677 回答