0

このファイルからデータを抽出する方法を理解するのに問題があります。

0|V1102299|USA05639|A&P POLYCHEM|20110214|49896.0000 |0.0000 
1|V1102299|00001|USA05639|A&P POLYCHEM|20110222|DOA100||Di Octyl Adipate      210KG/DR|16800.000 |KG|2970.0000 
2|V1102299|00001|00|20130617|5000010209||16800.000 ||49896.0000 
4|USA05639|A&P POLYCHEM|FRB1|Freight (Value)|4100.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL02|Fuel (value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL01|Temp Control (value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZOB1|Customs (Value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL03|Haz. Mat. (value)|0.000000000 |USD

ここで、最初の列は行タイプを示します:

  • 0ルート要素です (必須)
  • 1です (オプション、複数)
  • 2です (オプション、複数)
  • 3です (オプション、複数)
  • 4です (オプション、複数)

そして、対応する行列を持つ複数のテーブルに抽出し、行間の関係を維持します。
各行には、独自の列数と列名、型のセットがあります。

注:この csv ファイルをどのように受け取るかについては、私にはまったく制御できません。私は個人的にこれがひどい習慣であることを知っています。

4

1 に答える 1

1

これは、このような問題に対処する方法です。一般に、プロセスをいくつかの部分に分割する必要があります。

  1. csvファイルを分割しています。
  2. さまざまなファイル タイプの読み取り。

広告 1.Data Flow入力 csv ファイルを読み取るに a を入力します。

  • 文字列型のFlat File Source1 つの列 ( ) として開始します。Column1あなたが言及した行タイプを取得するためだけにそれを行います。

  • Transformation Componentこの行をいくつかに分割するために使用します。最初の値 (型識別子) を取得し、それを OutputBuffer ( ResultBuffer) という名前の列として設定しTypeIDます。

.

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
   var arr = Row.Column1.Split('|'); // Splitting the rows of Names column
   ResultBuffer.AddRow();
   ResultBuffer.TypeID = arr[0];
}
  • タイプをConditional Splitチェックし てください:(TypeID == 0他のものと同様)。この後、通常の、読んだ1列をFlat File Destinationファイル名に保存します。TypeID_file.txt

広告 2. 作成Data Flowされた各ファイルから個別に読み取る 5 つの個別のコンテナーを使用して、適切に設定された列名と型を使用して を作成します。

于 2013-09-14T17:56:31.040 に答える