3

基本的に、フラット ファイルをデータベースに取得する必要があります。フラット ファイルには、各行の最初の 2 文字がどのタイプのレコードであるかを示しています。

レコードのフィールドに一致するプロパティを持つレコード タイプごとにクラスを作成する必要がありますか? 配列だけを使用する必要がありますか?

データをデータベースに保存する前に、何らかのデータ構造にデータをロードして、単体テストを使用してデータが正しくロードされたことを確認できるようにします。

これが私が取り組まなければならないもののサンプルです(BAI2銀行取引明細書):

01,121000358,CLIENT,050312,0213,1,80,1,2/

02,CLIENT-STANDARD,BOFAGB22,1,050311,2359,,/

03,600812345678,GBP,fab1,111319005,,V,050314,0000/

88,fab2,113781251,,V,050315,0000,fab3,113781251,,V,050316,0000/

88,fab4,113781251,,V,050317,0000,fab5,113781251,,V,050318,0000/

88,010,0,,,015,0,,,045,0,,,100,302982205,,,400,302982205,,/

16,169,57626223,V,050311,0000,102 0101857345,/

88,LLOYDS TSB BANK PL 779300 99129797

88,TRF/REF 6008ABS12300015439

88,102 0101857345 K BANK GIRO CREDIT

88,/IVD-11 MAR

49,1778372829,90/

98,1778372839,1,91/

99,1778372839,1,92
4

7 に答える 7

1

クラス(または構造体、または言語がサポートする値の型)を作成することをお勧めします。

record.ClientReference

よりもはるかに説明的です

record[0]

そして、(素晴らしい!) FileHelpers Libraryを使用している場合、条件はほとんど指定されています。

于 2008-11-20T15:38:55.183 に答える
1

通常、検証ロジックには少なくとも 2 つのレベルがあり、より大まかなレベルは「整形式」であり、より細かいレベルは「正しいデータ」です。

ここにはいくつかの個別の問題があります。1 つの問題は、単純にデータを検証すること、または解析が正確であることを確認するためのテストを作成することです。これを行う簡単な方法は、指定された範囲の値を受け入れるクラスに解析し、そうでない場合は適切なエラーをスローすることです。

public void setField1(int i) { if (i>100) throw new InvalidDataException... }

レコードの種類ごとに異なるクラスを作成することは、解析ロジックがコードごとに大きく異なる場合に実行したいことがあるため、次のような条件付きロジックがありません。

   public void setField2(String s)
   {
         if (field1==88 && s.equals ...

         else if (field2==22 && s 
   }

うん。

于 2008-11-20T15:47:43.933 に答える
0

データ形式に何らかの複雑さが含まれている場合は、データを解析して保持し、検証を実行し、その他の適切なモデルタスクを実行するためのカスタムクラスのセットを作成する必要があることに同意します(たとえば、人間が読める形式の説明を返す場合もありますが、これは別のビュークラスに入れる方が良いと主張します)。これは、継承を使用するのにおそらく良い状況です。親クラス(おそらく抽象)がすべてのタイプのレコードに共通のプロパティとメソッドを定義し、各子クラスがこれらのメソッドをオーバーライドして、必要に応じて独自の解析と検証を提供できます。 、または独自のプロパティとメソッドを追加します。

于 2008-11-20T16:02:04.200 に答える
0

行のタイプごとにクラスを作成することは、配列を使用するよりも優れたソリューションです。

とはいえ、過去にハッシュテーブルの配列リストを使用して同じことを達成したことがあります。arraylist 内の各項目は行であり、ハッシュ テーブル内の各エントリは、列名とセル値を表すキーと値のペアです。

于 2008-11-20T16:09:28.863 に答える
0

過去にこの種のデータをロードする必要があったとき、最初の 2 文字を 1 つのフィールドに入れ、残りを別のフィールドに入れた作業テーブルにすべて入れていました。次に、最初の 2 文字に基づいて、適切な他の作業テーブルに解析しました。次に、2 番目の作業テーブル セットのデータをデータベースに挿入する前に、クリーンアップと検証を行いました。

SQL Server では、DTS (2000) または SSIS パッケージを介してこれを行うことができ、SSIS を使用すると、最初に作業テーブルに格納してオンザフライでデータを処理できる場合がありますが、プロセスは似ています。最初の 2 文字を使用して使用するデータ フロー ブランチを決定し、残りのレコードを何らかの種類の保持メカニズムに解析し、クリーンアップして検証してから挿入します。他のデータベースにもデータをインポートするための何らかのメカニズムがあり、同様のプロセスを使用すると確信しています。

于 2008-11-20T15:55:32.387 に答える
0

データを保持するデータベースを設計することから始めてみませんか。そうすれば、エンティティ フレームワークを使用してクラスを生成できます。

于 2008-11-20T16:52:52.413 に答える
0

ここに奇抜なアイデアがあります:

Perl で作業している場合は、DBD::CSVを使用してフラット ファイルからデータを読み取ることができます。ただし、区切り文字と EOL 文字に正しい値を指定する必要があります。次に、SQL ステートメントを使用してフラット ファイルから行を読み取ります。DBI はそれらを標準の Perl データ構造に変換し、好きな検証ロジックを実行できます。各行がすべての検証テストに合格すると、DBD::whatever を使用して宛先データベースに書き込むことができます。

-スティーブ

于 2008-11-20T18:50:25.967 に答える