给出了以下csv结构和数据:
timespan,someOtherField, ...
27.03.2017 - 31.03.2017,someOtherValue, ...
31.03.2017,someOtherValue, ...
我想将时间跨度分为开始和结束。如您所见,时间跨度可以是几天(第一条记录)或仅一天(第二条记录)。通过替换分隔符来分割第一条记录非常简单,但我不知道如何处理第二条记录。必须有一些逻辑将其标识为单日(开始和结束应该是相同的值)。
所有这些都是在SSIS中完成的,但我想在C#中实现它。
结果:
begin,end,someOtherField, ...
27.03.2017,31.03.2017,someOtherValue, ...
31.03.2017,31.03.2017,someOtherValue, ...
答案 0 :(得分:2)
首先添加派生列转换。在派生列编辑器内,添加begin
和end
列,其默认值为timespan
。
现在添加一个脚本组件转换(SCT),并添加timespan, begin, end
的输入列并将begin, end
标记为ReadWrite
。
仍在SCT内部,单击左侧窗格中的“脚本”,然后单击对话框底部的Edit Script
。这将启动Visual Studio实例以编辑您的C#脚本。
向下滚动到Input0_ProcessInputRow
功能,使其如下所示:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
var times = Row.timespan.Split(new string[] { " - " }, StringSplitOptions.RemoveEmptyEntries);
if (times.Length > 1)
{
Row.begin = times[0];
Row.end = times[1];
}
}
保存文件,退出VS的实例(它将是标题VstaProjects),然后单击“确定”退出“脚本转换编辑器”。
现在,如果您在该管道的底部添加数据查看器,您将看到您要查找的结果。
答案 1 :(得分:1)
检查时间跨度列中是否存在连字符。如果没有,则对begin
和end
使用相同的值。