2017-09-22 13 views
0

ディレクトリには、タブで区切られた設定数の列[6]を持つ多数のテキストファイルがあります。私はこれを「フラットファイルソース」ブロックを使ってSSISパッケージに読み込んでいます。ファイルに必要な数より多くの列がある場合、または列にデータがない場合は、このファイルを拒否します。SSIS - フラットファイルソース内の固定数の列

私はさまざまなサンプルファイルでいくつかのテストを行っています。列を追加するたびに、プログラムはこれらのファイルを受け入れます。良いコラムが少ないときにはエラーが発生します。

しかし、ファイルに特定の量の列が必要であり、データが各列に存在する必要があることを指定する方法はありますか?

私はSSISに多くの経験がありませんので、何か提案をいただければ幸いです。

ありがとうございます。

答えて

1

私はこれを行うためにスクリプトタスクを使用します。

System.IO.StreamReaderを使用してファイルを開き、ヘッダー行を読み取ってから、結果の文字列に必要な検証を実行できます。

SSIパッケージには、「FileIsValid」という名前のブール変数が作成されます(スクリプトタスクから)条件が満たされるとTrue、そうでない場合はFalseが書き込まれます。私はこれを使用して優先順位制約を使用してパッケージフローを指示します。このような

何か:すべての列にデータがあるチェックに関して

public void Main() 
{ 
    System.IO.StreamReader reader = null; 

    try 
    { 
     Dts.Variables["User::FileIsValid"].Value = false; 

     reader = new System.IO.StreamReader(Dts.Variables["User::Filepath"].Value.ToString()); 

     string header = reader.ReadLine(); 

     if (header.Trim() == "Column1\tColumn2\tColumn3\tColumn4\tColumn5\tColumn6") 
      Dts.Variables["User::FileIsValid"].Value = true; 

     reader.Close(); 
     reader.Dispose(); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    catch 
    { 
     if (reader != null) 
     { 
      reader.Close(); 
      reader.Dispose(); 
     } 

     throw; 
    } 
} 

、行ごとになるように、この必要はありませんか?

StreamReaderの行を読み続けて、正規表現を使用してこのようなことを確認できます。

0

クリス・マックに拡大:ファイルはヘッダを持っていない場合

あなたは、カウントを行うことができます。

char[] delim = new char[] {'\t'}; 
if(header.Split(delim).Length() == 5) 
... 
関連する問題