2017-03-31 20 views
1

以下CSV结构和数据新的领域给出:分裂入库时间和创造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

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

现在添加脚本组件转换(SCT),并添加timespan, begin, end输入列和标记begin, endReadWrite
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

+0

我不能感谢你才好索瑞尔。这工作绝对完美!我有一些脚本的预编译二进制文件的小故障,但我能弄明白! –

1

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