我有一个包含许多具有相同格式的csv文件的文件夹(相同的表结构但数据不同)。我希望将这些csv文件中的所有数据作为我的SSIS包中的单个数据集。我目前的解决方案是:在SQL Server中创建一个帮助表,并使用For Each Container将所有文件加载到表中。然后将此表作为SSIS包中所需的单个数据集加载。
但是,我更倾向于一种不依赖于在SQL Server中创建这样一个额外表的方法。我在想,使用C#和Script组件可能有更好的方法。有人有什么建议吗?
答案 0 :(得分:2)
怎么样:
var allCsv = Directory.EnumerateFiles("Src-Path", ".*csv", SearchOption.TopDirectoryOnly);
string[] header = { File.ReadLines(allCsv.First()).First(l => !string.IsNullOrWhiteSpace(l)) };
var mergedData = allCsv
.SelectMany(csv => File.ReadLines(csv)
.SkipWhile(l => string.IsNullOrWhiteSpace(l)).Skip(1)); // skip header of each file
File.WriteAllLines("Dest-Path", header.Concat(mergedData));
请注意,您必须使用System.Linq;
添加答案 1 :(得分:0)
这应该为你做。
var allCsv = Directory.EnumerateFiles("Src-Path", ".*csv", SearchOption.TopDirectoryOnly);
string[] header = { File.ReadLines(allCsv.First()).First(l => !string.IsNullOrWhiteSpace(l)) };
var mergedData = allCsv
.SelectMany(csv => File.ReadLines(csv)
.SkipWhile(l => string.IsNullOrWhiteSpace(l)).Skip(1)); // skip header of each file
File.WriteAllLines("Dest-Path", header.Concat(mergedData));
http://www.sqldataplatform.com/Blog/Post/49/How-to-Combine-CSV-Files-Using-a-Simple-C--Script
注意,你甚至不需要C#来做这么简单的事情!实际上,您可以将命令提示符用于完全标准化的内容。
打开命令窗口。 (按“窗口键”和“R”,然后输入命令并输入。
Type copy c:\*.csv c:\File.csv and press enter
This will combine all of the csv files that are in your root c:\ directory into one file called File.csv.
您可以根据需要更改文件名和路径。