2017-04-02 12 views
2

同じフォーマット(同じテーブル構造だがデータは異なる)のcsvファイルが多数あるフォルダがあります。これらのCSVファイルのすべてのデータをSSISパッケージ内の単一のデータセットとして保持したいと考えています。私の現在の解決策は次のとおりです。SQL Serverでヘルプテーブルを作成し、For Each Containerを使用してすべてのファイルをテーブルにロードします。 SSISパッケージに必要な単一のデータセットとしてこのテーブルをロードします。複数のcsvファイルを1つのデータセットとして読み込む最良の方法

しかし、私は非常に私のSQL Serverでこのような余分なテーブルを作成することに依存しない方法を好むでしょう。私はC#とスクリプトコンポーネントを使ってこれを行うより良い方法があるかもしれないと考えていました。誰か提案はありますか?どのように

答えて

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

マージされた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. 

あなたは、必要に応じてファイル名とパスを変更することができます。最後の行で

関連する問題