根据csv文件的行数移动文件
问题描述:
我有一个SSIS包,它有一个.csv文件作为平面文件源。条件拆分根据ID将数据插入到各个SQL Server登台表中。任何未成功插入的行都会重定向到错误.csv文件,每个ID一个。根据csv文件的行数移动文件
有了这些众多的错误文件,我想对有多少行(除了标题行)进行评估。如果至少有一个数据错误行,这些行将通过发送电子邮件任务发送给源开发人员,否则将通过文件系统任务进行存档。
我正在努力如何解决这个问题。我有一些想法,可以使用错误文件目录中的Foreach循环容器循环并通过脚本任务执行行计数。但是,我不确定如何将单个文件名传递给脚本任务。此外,我不确定事后可以做有条件的电子邮件/文件系统任务移动。
在脚本任务方面,脚本任务的东西看起来像这样(它是错误的),失败的是它不会超过1并被归档,通过它被通过电子邮件发送,只是为了某种想法。我对复杂的C#脚本颇为新颖。
public void Main()
{
string folderPath = Dts.Variables["User::errorDirectory"].Value.ToString();
string archivePath = @"\\SERVER\placeholderfilepath\blah\blah";
var FileNames = new List<string>();
var FilePaths = new List<string>();
DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
FileInfo[] files = directoryInfo.GetFiles();
var lineCount = 0;
foreach (FileInfo fileInfo in files)
{
lineCount = File.ReadAllLines(fileInfo.FullName).Count();
//MessageBox.Show(lineCount.ToString());
if (lineCount == 1)
{
File.Move(folderPath, archivePath);
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
经过几个小时的搜索后,我找不到任何涵盖此内容的内容,因此会感谢任何指针/文章。
在此先感谢。
答
您可能会尝试向将数据写入.CSV的数据流添加行计数组件。行计数就会把行数的一些变量,然后你就会知道,如果有在.CSV
任何行,我可以看到这个问题在你的代码
string folderPath = Dts.Variables["User::errorDirectory"].Value.ToString();
string archivePath = @"\\SERVER\placeholderfilepath\blah\blah";
var FileNames = new List<string>();
var FilePaths = new List<string>();
DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
FileInfo[] files = directoryInfo.GetFiles();
var lineCount = 0;
foreach (FileInfo fileInfo in files)
{
lineCount = File.ReadAllLines(fileInfo.FullName).Count();
//MessageBox.Show(lineCount.ToString());
if (lineCount == 1)
{
File.Move(fileInfo.FullName, Path.Combine(archivePath, fileInfo.Name));
}
}
Dts.TaskResult = (int)ScriptResults.Success;
我曾考虑过这一点,但我想知道是否可以通过脚本更有效地完成比设置大量行计数变量。将会有10个这样的文件启动,并且我预计这个数字会随着时间的推移而增加,所以想要做出这个面向未来的预测。 – TJB
是否考虑过对这些ID值的循环?在这种情况下,所有ID将重复使用相同的流程。或者你想发送一封包含所有错误.CSV的邮件? –
我真正想要的是评估目录中的每个文件。如果RowCount大于1,则将文件保留在那里,否则将其移至归档文件夹。我想遍历目录中的每个文件,打开它,执行行计数来完成此操作。邮件任务只会选取尚未移动的文件,因此这不是该位的问题。我正在努力的是一些脚本来读取文件名的每个包变量,对行进行计数并决定是否对其进行存档。 – TJB