14

フラットファイルのフォーマットを説明するために使用できる標準またはオープンフォーマットはありますか?私の会社は多くの異なる顧客ファイル形式を統合しています。XMLファイルを使用すると、XMLファイル形式を記述するためのXSDを簡単に取得または作成できます。フラットファイル形式(固定幅、区切り文字など)を説明するのに似たものを探しています。Stylus Studioは、独自の.conv形式を使用してこれを行います。その.conv形式を実行時に使用して、任意のフラットファイルをXMLファイルに変換できます。同じことをするためのオープンな方法や標準ベースの方法が他にあるのだろうかと思っていました。

固定幅か区切り文字かに関係なく、さまざまなフラットファイル形式を記述する1つの方法を探しているので、CSVはこの質問に対する答えではありません。

4

7 に答える 7

7

XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/lyons.HTM#N29 http://www.unidex.com/overview.htm

複雑なケース (ログ ファイルなど) の場合は、語彙パーサーを検討できます。

于 2009-10-14T19:22:36.460 に答える
3

既存のフラット ファイル形式の選択について:カンマ区切り値(CSV) 形式があります。または、より一般的にはDSV . ただし、個々のセルを区切る区切り文字 (コンマなど) があるため、これらは「固定幅」ではありません。CSV は標準化されていますが、すべての人が標準に準拠しているわけではありません。また、CSV は豊富なドキュメント構造を許可しないため、目的に対して単純すぎる場合があります。

その点で、標準化されたわずかに複雑な (ただし、より便利な) 形式のJSONYAMLの方が適しています。どちらも多くの言語ですぐにサポートされています。

最善の策は、この概要で非バイナリとしてリストされているすべての言語を調べて、どれが最適かを判断することです。

フラット ファイル形式の記述について:形式によって、これは非常に簡単な場合と難しい場合があります。ほとんどの場合、より簡単な解決策が存在しますが、一般的に機能する 1 つの方法は、ファイル形式を正式な文法と見なし、そのためのレクサー/パーサーを作成することです。しかし、それはかなり†</sup> 重機であることは認めます。

運が良ければ、いくつかの高度な正規表現でうまくいくかもしれません。ただし、ほとんどの形式はそれには向いていません。‡</sup> lexer/parser を自分で作成する予定がある場合は、PLY (Python Lex-Yacc) をお勧めします。しかし、他の多くのソリューションが多くの異なる言語で存在し、それらの多くは古い学校のLex & Yaccよりも便利です。詳細については、「どのパーサー ジェネレーターをお勧めしますか?」を参照してください。


  †</sup>: はい、それは控えめな表現かもしれません。
  ‡</sup>:メールアドレスの形式を正しく説明することさえ簡単ではありません。

于 2009-10-14T18:55:26.083 に答える
2

COBOL (好むと好まざるとにかかわらず) には、ファイル内の固定幅レコード形式を記述するための標準形式があります。

ただし、他のファイル形式は、説明がやや簡単です。たとえば、CSV ファイルは単なる文字列のリストです。多くの場合、CSV ファイルの最初の行は列名です。これが説明です。

JSON を使用してテキスト ファイルのメタデータを作成する例があります。これは、JSON ファイル、CSV ファイル、および固定形式のファイルに適用できます。

http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.htmlを見てください。

これは、JSON を使用してメタデータをエンコードする IBM の sMash (Project Zero) です。これは、フラット ファイルに簡単に適用できます。

于 2009-10-14T19:27:18.367 に答える
1

結局のところ、ストレージのニーズに合わせて独自のファイル標準を定義する必要があるでしょう。私が提案するのは、受信するすべてのファイル タイプの内部コンテナとして、xml、YAML、または JSON を使用することです。これに加えて、固定幅ファイルの列サイズなどのメタデータを維持するために、いくつかの追加の検証ロジックを実装する必要があります (固定幅からのインポートおよび固定幅へのエクスポート用)。または、内部形式に変換する各ファイルに一連のメタデータを保存またはリンクすることもできます。

そこに標準があるかもしれませんが、これらの問題に対して「万能」なソリューションを作成するのは非常に困難です. これらのマッピングを簡単に作成できるエンティティ関係管理ツール (Talend など) がありますが、ファイル形式の定義とルールを維持するために多くの時間を費やす必要があります。

列幅の強制に関しては、xml スキーマを使用してフォーマットを記述できるため (長さ制限あり)、xml が最適なソリューションである可能性があります。YAML や JSON の場合は、独自のロジックを作成する必要があるかもしれませんが、他の誰かが解決策を考え出したと確信しています。

詳細については、 XML とカンマ区切りのテキスト ファイルを参照してください。

于 2009-10-14T19:05:14.317 に答える
1

フラットファイル形式を記述するための標準形式またはオープン形式があるかどうかはわかりません。しかし、ある業界がこれを行ってきました。それは銀行業界です。実際、金融機関はSWIFTと呼ばれる専用ネットワークを介して標準化されたメッセージを使用して通信しています。SWIFT メッセージはもともと定位置 (SWIFTML、XML 化されたバージョンの前) でした。ちょっとあいまいなので、それが良い提案かどうかはわかりませんが、SWIFT Formatting Guideを見ると、いくつかのアイデアが得られるかもしれません。

そうは言っても、謙虚なフラットファイルパーサーであるFlatwormをチェックしてください。私はそれを使用して位置ファイルや CSV ファイルを解析し、その XML 記述子形式が気に入りました。SWIFTよりも良い提案かもしれません:)

于 2009-10-14T20:12:37.847 に答える
0

CSV

CSV は、カンマ文字で区切られたフィールド/列と、改行で区切られたレコード/行を持つ区切りデータ形式です。特殊文字 (カンマ、改行、または二重引用符) を含むフィールドは、二重引用符で囲む必要があります。ただし、行に空の文字列である単一のエントリが含まれている場合は、二重引用符で囲むことができます。フィールドの値に二重引用符が含まれている場合は、その隣に別の二重引用符を配置することでエスケープされます。CSV ファイル形式には、特定の文字エンコード、バイト順、または行末記号の形式は必要ありません。


ウィキペディアの CSV エントリにより、データのシリアル化形式の比較を見つけることができました。これは、あなたが求めていたものとほぼ同じです。

于 2009-10-14T18:55:42.380 に答える
0

私が知っている唯一の同様のものは、現在 70 のファイル形式を解析できる Hachoir です。

http://bitbucket.org/haypo/hachoir/wiki/Home

プラグインパーサーベースであるため、本当に宣言型言語としてカウントされるかどうかはわかりませんが、機能しているようで、拡張可能であり、ニーズをうまく満たす可能性があります.

余談ですが、IFF (Interchange File Format) など、興味深い標準化された拡張可能なフラット ファイル形式があります。

于 2009-10-14T19:51:48.030 に答える