ソリューションの概要
これを行うには、Flat File Connection Managerを1つ追加します。 データ型がDT_WSTRの列を1つだけ追加します 長さは4000 (名前がColumn0であると仮定します )-したがって、すべての列は1つの大きな列と見なされます
Dataflow taskScript Componentを追加しますFlat File Sourceの後- マーク
Column0入力列として、17個の出力列を追加 -
Input0_ProcessInputRow内 メソッドsplitColumn0区切り文字で、次に配列の長さが17であるかどうかを確認し、出力列に値を割り当てます。そうでない場合は、行を無視します。
詳細なソリューション
- フラットファイル接続マネージャーを追加し、テキストファイルを選択します
- [詳細設定]タブに移動します 、1つの列を除くすべての列を削除します
- remianing列のデータ型を
DT_WSTRに変更します 長さ=4000
- DataFlowタスクを追加する
- データフロータスク内に、フラットファイルソース、スクリプトコンポーネント、およびOLEDB宛先を追加します
- スクリプトコンポーネントで
Column0を選択します 入力列として
- 17個の出力列(最適な出力列)を追加します
-
OutputBufferを変更しますSynchronousInputNoneへのプロパティ
- スクリプト言語を選択して
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 -
出力列を宛先列にマップします