2017-04-02 53 views
2

我有一個文件夾,其中包含許多具有相同格式(相同表結構但數據不同)的csv文件。我希望將這些csv文件中的所有數據作爲SSIS包內的單個數據集。我目前的解決方案是這樣的:在SQL Server中創建一個幫助表,並使用For Each Container將所有文件加載到表中。然後將該表作爲SSIS包中所需的單個數據集加載。將多個csv文件作爲單個數據集加載的最佳方式

但是,我非常喜歡一種不依賴於在SQL Server中創建這樣的額外表的方法。我在想,使用C#和Script組件可能會有更好的方法。有人有任何建議嗎?

回答

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的補充;

+0

在最後一行中,我是否需要寫mergeData值轉換爲csv文件? – TheEsnSiavashi

+1

取決於您是否要將其保存到合併的csv文件,或者只是通過代碼使用它,並只保存需要的輸出,但合併後的數據包含從頭文件中刪除標題的所有數據 –

+0

I不需要合併的csv文件,將數據輸入爲腳本組件的輸出是我喜歡的,謝謝。 – TheEsnSiavashi

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. 

您可以根據需要更改文件名和路徑。

相關問題