ediのトランザクションタイプは実際には重要ではありません(850 =注文、875 =食料品店)。いくつかのediパーサーを作成したので、ここで私が見つけたいくつかのことを示します。
固定幅(メモリが機能する場合は105文字)であるISA(およびISAのみ)を信頼できるはずです。最初の105文字を削除します。その後、「GS」が最初に発生する前のすべてがラインターミネータです(これは何でもかまいません。0x07(ビープ音)を含めてください。デバッグのためにstdoutに出力している場合や、ビープ音がたくさん鳴っている場合は注意してください。スピーカーから)。通常、これは1文字または2文字ですが、それ以上になることもあります(データを送信する人が何らかの理由で追加のターミネータを追加する場合)。ラインターミネータを取得すると、セグメント(フィールド)区切り文字を取得できます。私は通常、GS行の3文字をプルしてそれを使用しますが、ISA行の4文字も機能するはずです。
また、複数のISAを含むファイルを取得できることにも注意してください。その場合、各ISA内で行またはフィールドの区切り記号が同じであることを期待することはできません。
別のこと..ediファイルが可変長のISAを持つことも可能です(ここでも、その仕様かどうかはわかりません)。これは非常にまれですが、私はそれに対応しなければなりませんでした。その場合は、行をそのフィールドに解析する必要があります。ISAの最後のフィールドは1文字の長さしかないため、そこからISAの実際の長さを判別できます。私なら、そのようなファイルが表示されない限り、これについて心配する必要はありません。それはまれな出来事です。
私が上で言ったことは「仕様」の文字ではないかもしれません...つまり、同じファイルに異なる行区切り文字を使用することが合法かどうかはわかりませんが、異なるISAに使用することは可能ですが、技術的には可能ですそのようにしてやってくるファイルを処理しなければならないので、私はそれに対応します。私が使用しているediプロセッサは、1日に5000を超えるファイルを処理し、3000を超える可能性のあるデータソースを処理します(したがって、多くの奇妙なものが表示されます)。
よろしく、ドン