1

我有一个正在读取 .csv 文件的平面文件源。该文件有一个日期时间列,其中一些行有数字。我想使用条件拆分组件在读取文件时跳过日期时间列中有数字的行。

ID 日期 电话号码 查询
1 05/01/2013 15:40 9879879877 Sometext
2 05/12/2013 8:30 9879879877 Sometext
3 2

csv 文件采用上述格式。每当 Date 列有数字时,PhoneNumber 和 Query 列都是空白的,我尝试在条件拆分中使用以下条件来跳过第 3 行

电话号码!=""

条件拆分中的上述条件给了我以下错误:

"输出 "PhoneNumber" (282)" 上的表达式 "PhoneNumber != """ 评估为 NULL,但 "组件 "PhoneNumber Check" (262)" 需要布尔结果。修改输出上的错误行处置以将此结果视为 False(忽略失败)或将此行重定向到错误输出(重定向行)。对于条件拆分,表达式结果必须是布尔值。NULL 表达式结果是一个错误。

当我对查询列使用相同的条件时,它会跳过所有行

那么如何使用条件拆分跳过日期时间列中有数字的行?

编辑:

我要上传的文件格式如下

ID 日期 电话号码 查询
1 05/01/2013 15:40 9879879877 Sometext
2 05/12/2013 8:30 9879879877 Sometext
3 2
4 05/12/2013 8:30 9879879877 Sometext
5 05/12/2013 8:30 98877
6 05/12/2013 8:30 9879879877 Sometext
7 3
8 05/12/2013 8:30 9879879877 Sometext
9 05/12/2013 8:30 9879879877 Sometext

在每个文件中,大约有 3-4 个错误行需要跳过,但由于某些原因,在上面的示例格式中,行ID 3被跳过并且行ID 7被读取为3" "8(这是一些如何混合或组合数值行的Date列与ID 7整个下一行,行与ID 8) 和行的所有列ID 8与行在单行中读取,并且行ID 7的所有空白列ID 7都被跳过。我已经在记事本中打开了文件并检查了该特定行的逗号数,它们是正确的。文件有问题还是包本身有问题?

4

1 回答 1

2

您还需要检查 Null 条件

ISNULL([PhoneNumber]) || [PhoneNumber] != ""

或者

ISNULL([PhoneNumber]) || LEN[PhoneNumber] != 0

它为我工作

样品日期:-

在此处输入图像描述

我没有选择retain NULL value from the Source平面文件源组件中的选项选项

条件溢出表达式

在此处输入图像描述

结果 :

在此处输入图像描述

上图中第三行被丢弃。

顺便说一句,如果您只是想忽略包含无效 DateTime 值的行,请遵循以下建议

如果您只是想验证日期列,有 3 种方法:-

1.将列类型更改为,Datetime而不是string在平面文件源中,redirect并将错误行更改为某个文件或表。

2.使用 aderived transformation并将列转换为DT_DBTIMESTAMP并再次重定向错误行。

3.使用script组件并编写C#或Vb代码来解析[日期]列,如

row.ValidDate = DateTime.Parse(row.Date);

ValidDate在中创建一个输出列Script component

于 2013-05-23T06:18:33.973 回答