我目前正在flat file export
为我们的一个客户创建一个,我已经设法以他们想要的格式获取文件,我正在尝试获得创建dynamic
文件名的最简单方法。我已经将日期作为变量和路径等,但他们希望在文件名中进行计数。例如
文件名 1 TDY_11-02-2013_{1}_T1.txt
:. 作为{}
伯爵。所以下周的文件将是TDY_17-02-2013_{2}_T1.txt
我看不到这样做的简单方法!有任何想法吗??
编辑:在我的第一个答案中,我认为您的意思是查询返回的值的计数。我的错!有两种方法可以实现,你可以循环到目标文件夹,按日期选择最后一个文件,获取它的值并增加1,这听起来很麻烦。为什么不在数据库上使用最后执行日期和 ID 的简单日志表,然后根据该表的最后一行编写文件名?
你的问题到底出在哪里?
您可以使用表达式创建动态文件名:
计数,您可以在数据流中使用“行计数”组件将结果分配给变量并在表达式中使用该变量:
使用脚本任务并获取文件名大括号内的数字并将其存储在变量中。创建一个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"