ソリューションの概要
これを行うには、Flat File Connection Manager
を1つ追加します。 データ型がDT_WSTR
の列を1つだけ追加します 長さは4000
(名前がColumn0
であると仮定します )-したがって、すべての列は1つの大きな列と見なされます
Dataflow task
Script Component
を追加しますFlat File Source
の後- マーク
Column0
入力列として、17個の出力列を追加 -
Input0_ProcessInputRow
内 メソッドsplitColumn0
区切り文字で、次に配列の長さが17であるかどうかを確認し、出力列に値を割り当てます。そうでない場合は、行を無視します。
詳細なソリューション
- フラットファイル接続マネージャーを追加し、テキストファイルを選択します
- [詳細設定]タブに移動します 、1つの列を除くすべての列を削除します
- remianing列のデータ型を
DT_WSTR
に変更します 長さ=4000
- DataFlowタスクを追加する
- データフロータスク内に、フラットファイルソース、スクリプトコンポーネント、およびOLEDB宛先を追加します
- スクリプトコンポーネントで
Column0
を選択します 入力列として
- 17個の出力列(最適な出力列)を追加します
-
OutputBuffer
を変更しますSynchronousInput
None
へのプロパティ
- スクリプト言語を選択して
Visual Basic
-
スクリプトエディタで、次のスクリプトを記述します
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Column0_IsNull AndAlso Not String.IsNullOrEmpty(Row.Column0.Trim) Then Dim strColumns As String() = Row.Column0.Split(CChar(";")) If strColumns.Length <> 17 Then Exit Sub Output0Buffer.AddRow() Output0Buffer.Column = strColumns(0) Output0Buffer.Column1 = strColumns(1) Output0Buffer.Column2 = strColumns(2) Output0Buffer.Column3 = strColumns(3) Output0Buffer.Column4 = strColumns(4) Output0Buffer.Column5 = strColumns(5) Output0Buffer.Column6 = strColumns(6) Output0Buffer.Column7 = strColumns(7) Output0Buffer.Column8 = strColumns(8) Output0Buffer.Column9 = strColumns(9) Output0Buffer.Column10 = strColumns(10) Output0Buffer.Column11 = strColumns(11) Output0Buffer.Column12 = strColumns(12) Output0Buffer.Column13 = strColumns(13) Output0Buffer.Column14 = strColumns(14) Output0Buffer.Column15 = strColumns(15) Output0Buffer.Column16 = strColumns(16) End If End Sub
-
出力列を宛先列にマップします