将多个csv文件作为单个数据集加载的最佳方法

时间:2017-04-02 20:42:50

标签: c# sql-server csv ssis

我有一个包含许多具有相同格式的csv文件的文件夹(相同的表结构但数据不同)。我希望将这些csv文件中的所有数据作为我的SSIS包中的单个数据集。我目前的解决方案是:在SQL Server中创建一个帮助表,并使用For Each Container将所有文件加载到表中。然后将此表作为SSIS包中所需的单个数据集加载。

但是,我更倾向于一种不依赖于在SQL Server中创建这样一个额外表的方法。我在想,使用C#和Script组件可能有更好的方法。有人有什么建议吗?

2 个答案:

答案 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.

您可以根据需要更改文件名和路径。