2012-01-10 18 views
3

SSISを使用してCSVファイルをインポートしようとしています。通常、それはうまく動作しますが、問題のファイルは、この形式になっています。中間の行を無視してcsvファイルを読み取る

....
データ、データ、データ、データ、データ、データ、データ
は無視し、
は無視無視、
を無視 は、結果をb、それはOK dataをインポートしていることである

...
データ、データ、データ、データ、データ、データ、データ
を無視し、無視しますそれが ignore行になると、改行が発生するまで、期待される列の残りの部分として次の行のデータを入れ始めるでしょう。

必要なフィールド数を持たない行を無視するにはどうすればよいですか?


、それは理想的ではなかったが、私は、

+0

許容されるソリューションをインポートする前にCSVをマッサージするスクリプトはありますか? – cha0site

+0

何も組み込まれていなければ、私は確かにそれを使うことができますが、前にスクリプトコンポーネントを使ったことはありませんでした。 –

答えて

1

一つの技術は、私が使用したSSIS 2005を使用していますし、スクリプトを使用して、一度にソースデータに行全体を読むことでした入力行をテストするtransform - 行に十分なフィールドがある場合(コンマにstring.splitを使用)、各パーツを関連する出力行値に割り当てます。

http://msdn.microsoft.com/en-us/library/ms136114.aspx

それはセットアップするように簡単ではありませんが、それは、過去に私のために[OK]を働いています。スクリプト変換出力用に多くの列を手動で定義しなければならない場合は、苦労するかもしれません。

+0

私はスクリプト変換コンポーネントを追加することに行きましたが、入力にしか作用しないように見えますが、入力が遅くなりすぎると、無効なデータによって列が既に変形されてしまいました。たとえば、無効なデータの最初の行は、次の行のフィールドで終わります(別の行でも同様です)。 –

+0

上記のために、無効なデータ行に追加された行の残りのフィールドがすべて実際に含まれている最後の列を切り捨てようとすると、エラーが発生します。だから私はそれがインポートになる前にファイルを処理する必要があるように見えます。 –

+0

@GeorgeDuckett - 1つのロットで全体の行を読み込みます - CSVソース入力を変更して1つのオブジェクトとして行全体を読み込み、スクリプト変換に渡し、行全体をテストします。手動でスクリプト内で分割し、手動で設定したスクリプト出力に渡します。 – Meff