0

ヘッダーとフッターを含む固定長のフラット ファイルがありますが、これらの行には、ヘッダーの H、トレーラーの T、データの D などの識別子がありません。

すべてのデータは位置 1 から始まりますが、ヘッダーとフッターは行形式の異なる位置から始まります。条件付き分割を使用しようとしましたが、必要な結果が得られませんでした。

データ ファイルからヘッダーとフッターを取得するためのロジックを見つけるのを手伝ってください。今後の参考のために、データを SQL Server テーブルに保存し、ヘッダー/フッター データをフラット ファイルに保存したいと考えています。

4

1 に答える 1

0

質問に正確なファイル形式を含めていないので、次のように見えると仮定します。

    This is the header line with some spaces at the beginning.
This, is, real, line 1
This, is, real, line 2
       End of file. It has some spaces too at the beginning.

これが状況を正しく表している場合は、フラットファイルソースを使用し、各レコードを1つの列(EntireRowなど)で全体として読み取り、条件付き分割を使用して、次の条件を使用してヘッダー/フッターを識別できます。

LEN(EntireRow) > LEN(TRIM(EntireRow))

ここでの問題は、意味のある行をどのように分割するかです(上記の例の実際の行1と2)。別のファイルにダンプできます。これで、このファイルはヘッダーとフッターが削除されてクリーンになります。これは単純ですが、最も効率的なソリューションではありません。

解決策2:解決策2:

より良い解決策は、スクリプトコンポーネントを使用することです。行を動的に追加する方法について説明します。そのような例の1つ:http ://www.sqlis.com/post/The-Script-Component-as-a-Transformation.aspx

さて、始めに、ヘッダー/フッターが位置1から開始しないという条件を使用してヘッダー/フッターを削除するサンプルコード...エラー処理なし。上記のリンクは、出力とその出力内の列を追加する方法を示しています。列のデータ型がソースファイルのデータ型と一致していることを確認してください。

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    /*
      Add your code here
    */

    if ((Row.EntireRow.Length == Row.EntireRow.Trim().Length))
    {
        string[] sArrFields = Row.EntireRow.Split(',');

        MeaningfulBuffer.AddRow();
        MeaningfulBuffer.Col1 = sArrFields[0];
        MeaningfulBuffer.Col2 = sArrFields[1];
        MeaningfulBuffer.Col3 = sArrFields[2];
        MeaningfulBuffer.Col4 = sArrFields[3];

    }
}

これだけのガイダンスが問題を解決するのに十分であり、私が提供した2つの解決策の1つが機能することを願っています。返信してください。

于 2013-02-25T04:40:06.670 に答える