2011-10-31 14 views
1

定義方法複数の行区切り文字フラットファイル接続はSSISにありますか? たとえば、次の文字列を含むテキストファイルの場合:複数の行区切り子

常に熟知が必要です。無礼は容認されません。

';'を使用した後、この2つの行が必要です。および'。'行区切り文字用

礼儀を常に

無礼は、ソースデータについて

+0

これで改行(\ n)のような行区切り文字がすでに定義されていて、セミコロンで分割したいと思っていますか?データフローに1行しかないのですか、1-n列をコピーしてCivility行とRudeness行をダブルアップする必要がありますか? – billinkc

+0

@arz行区切り文字に ';'と '\ r \ n'を使用することを意味しますか? –

答えて

3

を許容されないで必要とされ、Iは3行ファイルを作成

Civility is required at all times; rudeness will not be tolerated. 
The quick brown fox jumped over the lazy dogs. 
I am but a single row with no delimiter beyond the carriage return 

私が以下で取った一般的なアプローチは、フラットファイル接続マネージャをRagged Rightのフォーマットで使用し、ヘッダ行区切り文字を{CR} {LF}にすることです。私は1列のInputRowをString 8000として定義しました。YMMV

私のデータフローでは、フラットファイルソースの後に、Split Rowsというデータ変換としてスクリプトコンポーネントを追加します。入力列]タブで

data flow

、InputRowをチェックして、スクリプトが値にアクセスできるように読み取り専用のままにしておきます。 ReadWriteに切り替えて出力値を変更することはできますが、このタイプの操作には適用されません。

デフォルトでは、スクリプトタスクは同期コンポーネントです。つまり、行内と行外間に1対1の関係があります。これはあなたのニーズに合わないため、非同期モードに切り替える必要があります。出力0をOutputSplitに変更し、SynchronousInputの値を「入力0(16)」から「なし」に変更しました。あなたの16の価値は異なるかもしれません。 OutputSplitのためのあなたの出力列で

Script to Async mode

、スクリプト変換内SplitRow DT_STR 8000 output column definition

の名前の列を追加し、あなただけのProcessInputRow方法を気にする必要があります。文字列クラスはスプリッタとして機能する文字値の配列をとるsplitメソッドを提供します。現在、配列の初期化子では以下のようにコード化されていますが、簡単に変数として定義してスクリプトに渡すこともできます。それはポスターへの運動として残されています。

行われ、このすべてで
/// <summary> 
/// we have to make this an async script as 1 input row can be many output rows 
/// </summary> 
/// <param name="Row"></param> 
public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    string[] results = Row.InputRow.Split(new char[]{';', '.'}); 
    foreach (string line in results) 
    { 
     // Remove this line if it is desirable to have empty strings in the buffer 
     if (!string.IsNullOrEmpty(line)) 
     { 
      OutputSplitBuffer.AddRow(); 
      // You might want to call trim operations on the line 
      OutputSplitBuffer.SplitRow = line; 
     } 
    } 
} 

、私はF5と出来上がりを打つ、 Data viewer

これは、あなたがそれを介して実行どのくらいのデータに応じて、かなりのメモリ集約型のパッケージになるだろう。私は最適化があると確信していますが、これはあなたを動かすのに十分であるはずです。

+0

ただ1つの列。 – ARZ

+0

ファイルレイアウトに関するもう1つの質問で更新されました。 2または3デリミタ? – billinkc

+0

区切り文字の数は定数ではなく、2,3以上でもかまいません。 – ARZ

関連する問題