如何根据特定日期范围验证文件名?

时间:2017-10-16 18:16:24

标签: validation visual-studio-2015 ssis

我正在制作一个SSIS包。文件名为:ap_alpha100_p1_20171013_123456.txt

如果日期在过去几天内,我只希望包收取该文件。例如。

ap_alpha100_p1_20171013_123456.txt是正确的,因为20171013 = 2017/10/13

ap_alpha100_p1_20170613_123456.txt不正确,因为20170613 = 2017/06/13

我对SSIS很新,并试图谷歌解决类似的问题,但我的研究让我很短暂。

1 个答案:

答案 0 :(得分:1)

尝试这种方法:

  1. 创建变量var_fileName以存储for-each的文件名 循环容器。
  2. 创建一个将设置为的变量var_flag 如果日期在本周内(可配置),则为true,否则为false。

  3. 创建一个for-each循环容器,其ForEach file enumerator和变量映射设置为var_fileNameu1

  4. 在容器内创建script task。读变量:var_fileName。读写变量:var_flag。

  5. 在脚本任务(C#)中输入以下代码。

            Dts.Variables["User::var_flag"].Value = false;
    
            String a;
            a = Dts.Variables["User::var_fileName"].Value.ToString();   //output: ap_alpha100_p1_20171010_123456
            String b;
            b = a.Substring(15, 8);  //output: 20171010
    
    
            string result = DateTime.ParseExact(b, "yyyyMMdd",
                            CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");   //output: 2017-10-10
    
            DateTime oDate = Convert.ToDateTime(result);    //convert string to datetime
            DateTime Today = DateTime.Today;
            DateTime StartDate = Today.AddDays(-((int)Today.DayOfWeek));
            DateTime EndDate = StartDate.AddDays(7).AddSeconds(-1);
    
            if (oDate > StartDate && oDate < EndDate)
            {
                Dts.Variables["User::var_flag"].Value = true;
            }
            else
            {
                Dts.Variables["User::var_flag"].Value = false;
            }
    
  6. 它应该看起来像这样(为了便于理解而显示的评论):

    i2

    1. 现在只需使用约束条件为script task的{​​{1}}和Data Flow Task之间的约束。
    2. 逻辑是:如果日期介于本周之间,那么flag将变为true,否则为false。在真实情况下,执行数据流任务。