问题
空行不包含任何列分隔符,这意味着它只包含一列,这会在读取 falt 文件时出现问题。
如何解决
在平面文件连接管理器中删除列分隔符并将每一行读取为DT_STR 类型的一列并将长度设置为4000
然后添加一个脚本组件并执行以下操作:
- 检查该行是否为空
- 输出必须包含您需要的列
你可以使用类似的代码:(我用vb.net)
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.Column0_IsNull AndAlso
Not String.IsNullOrEmpty(Row.Column0) Then
Dim strcolumnms() As String = Row.Column0.Split(CChar(";"))
Dim dtTemp As Date
If DateTime.TryParse(strcolumnms(0), System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.Column1 = dtTemp
Else
Row.Column1_IsNull = True
End If
If DateTime.TryParse(strcolumnms(1), System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.Column2 = dtTemp
Else
Row.Column2_IsNull = True
End If
Else
Row.Column1_IsNull = True
Row.Column2_IsNull = True
End If
End Sub
处理平面文件中的日期
在处理存储在平面文件中的日期值(或其他数据类型)并使用Script Component 或Data Conversion 转换它们(在检查它们是否格式正确之后)时,最好选择DT_STR 类型.
使用脚本组件
首先你必须添加一个Script component,将日期列标记为输入,创建一个DT_DBDATE类型的新输出列
如果您想检查特定日期格式,您可以使用DateTime.TryParseExact() 方法或使用DateTime.TryParse() 尝试根据 CultureInfo 日期格式解析日期。
我举两个例子:
假设输入列名为inDate,输出列为outDate
DateTime.TryParseExact()
Dim strFormats() As String = {"yyyy-MM-dd"}
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParseExact(Row.inDate, strFormats, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
DateTime.TryParse()
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParse(Row.inDate, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
您可以在这篇文章中阅读有关使用 SSIS 脚本组件进行日期时间转换的更多信息:
使用数据转换转换
使用数据转换组件将DT_STR 列转换为DT_DBDATE,并在Error Output 上设置Ignore failure,以便将无法转换的值替换为NULL