定義方法複数の行区切り文字フラットファイル接続はSSISにありますか? たとえば、次の文字列を含むテキストファイルの場合:複数の行区切り子
常に熟知が必要です。無礼は容認されません。
';'を使用した後、この2つの行が必要です。および'。'行区切り文字用:
礼儀を常に
無礼は、ソースデータについて
定義方法複数の行区切り文字フラットファイル接続はSSISにありますか? たとえば、次の文字列を含むテキストファイルの場合:複数の行区切り子
常に熟知が必要です。無礼は容認されません。
';'を使用した後、この2つの行が必要です。および'。'行区切り文字用:
礼儀を常に
無礼は、ソースデータについて
を許容されないで必要とされ、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というデータ変換としてスクリプトコンポーネントを追加します。入力列]タブで
、InputRowをチェックして、スクリプトが値にアクセスできるように読み取り専用のままにしておきます。 ReadWriteに切り替えて出力値を変更することはできますが、このタイプの操作には適用されません。
デフォルトでは、スクリプトタスクは同期コンポーネントです。つまり、行内と行外間に1対1の関係があります。これはあなたのニーズに合わないため、非同期モードに切り替える必要があります。出力0をOutputSplitに変更し、SynchronousInputの値を「入力0(16)」から「なし」に変更しました。あなたの16の価値は異なるかもしれません。 OutputSplitのためのあなたの出力列で
、スクリプト変換内SplitRow DT_STR 8000
の名前の列を追加し、あなただけの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と出来上がりを打つ、
これは、あなたがそれを介して実行どのくらいのデータに応じて、かなりのメモリ集約型のパッケージになるだろう。私は最適化があると確信していますが、これはあなたを動かすのに十分であるはずです。
これで改行(\ n)のような行区切り文字がすでに定義されていて、セミコロンで分割したいと思っていますか?データフローに1行しかないのですか、1-n列をコピーしてCivility行とRudeness行をダブルアップする必要がありますか? – billinkc
@arz行区切り文字に ';'と '\ r \ n'を使用することを意味しますか? –