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