拆分时间跨度并在csv

时间:2017-03-31 15:18:13

标签: c# csv ssis split

给出了以下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, ...

2 个答案:

答案 0 :(得分:2)

首先添加派生列转换。在派生列编辑器内,添加beginend列,其默认值为timespan
dco

现在添加一个脚本组件转换(SCT),并添加timespan, begin, end的输入列并将begin, end标记为ReadWrite
sct cols

仍在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),然后单击“确定”退出“脚本转换编辑器”。

您的数据流现在应该是这样的。
enter image description here

现在,如果您在该管道的底部添加数据查看器,您将看到您要查找的结果。

data viewer

答案 1 :(得分:1)

检查时间跨度列中是否存在连字符。如果没有,则对beginend使用相同的值。