1

我目前正在flat file export为我们的一个客户创建一个,我已经设法以他们想要的格式获取文件,我正在尝试获得创建dynamic文件名的最简单方法。我已经将日期作为变量和路径等,但他们希望在文件名中进行计数。例如

文件名 1 TDY_11-02-2013_{1}_T1.txt:. 作为{}伯爵。所以下周的文件将是TDY_17-02-2013_{2}_T1.txt

我看不到这样做的简单方法!有任何想法吗??

4

2 回答 2

1

编辑:在我的第一个答案中,我认为您的意思是查询返回的值的计数。我的错!有两种方法可以实现,你可以循环到目标文件夹,按日期选择最后一个文件,获取它的值并增加1,这听起来很麻烦。为什么不在数据库上使用最后执行日期和 ID 的简单日志表,然后根据该表的最后一行编写文件名?

你的问题到底出在哪里?

您可以使用表达式创建动态文件名:

在此处输入图像描述

计数,您可以在数据流中使用“行计数”组件将结果分配给变量并在表达式中使用该变量:

在此处输入图像描述

于 2013-05-13T12:19:30.690 回答
0

使用脚本任务并获取文件名大括号内的数字并将其存储在变量中。创建一个FileNo of type int存储文件编号的变量()

伪代码

  string name = string.Empty;
  string loction = @"D:\";

 /* Get the path from the connection manager like the code below
    instead of hard coding like D: above
   string flatFileConn = 
   (string(Dts.Connections["Yourfile"].AcquireConnection(null) as String);
 */
  string pattern = string.Empty;
  int number = 0;
  string pattern = @"{([0-9])}"; // Not sure about the correct regular expression to retrieve the number inside braces
  foreach (string  s in Directory.GetFiles(loction,"*.txt"))
     {
        name = Path.GetFileNameWithoutExtension(s);
        Match match = Regex.Match(name, pattern );
          if (match.Success)
           {
             dts.Variables["User::FileNo"].Value = int.Parse(match.Value)+1;
           }
     }

现在,一旦您获得该值,请在连接管理器的文件表达式中使用它

@[User::FilePath] +@[User::FileName]
                             +"_{"+ (DT_STR,10,1252) @[User::FileNo] + "}T1.txt"
于 2013-05-13T12:46:58.673 回答