13

私はEDIを初めて使用しますが、質問があります。

ISA行の最後の3文字を調べることで、EDI形式について必要なもののほとんどを取得できることを読みました。これは、すべてのEDIが改行を使用してエンティティを区切る場合は問題ありませんが、多くの場合、任意の数の文字を区切り文字として使用する単一行ファイルであることがわかりました。私が解析したすべてのEDIの非常に最後の文字がブレーク文字であることに気づきました。私は数百を調べましたが、これに対する例外は見つかりませんでした。最初にその文字を取得し、それを使用してISA行の最後の3つを取得する場合、EDIからデータを解析できることを合理的に期待する必要がありますか?

これが役立つかどうかはわかりませんが、問題のEDIの「タイプ」は850、875になる傾向があります。それが標準かどうかはわかりませんが、言及する価値があるかもしれません。

4

3 に答える 3

15

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を超える可能性のあるデータソースを処理します(したがって、多くの奇妙なものが表示されます)。

よろしく、ドン

于 2010-01-22T14:51:56.990 に答える
0

EDIコンテンツは、セグメントと要素で構成されています。

それを解析するには、最初にセグメントに分割し、次にそのような要素に分割する必要があります(PHPの場合)。

<?php 

$edi = "YOUR EDIT STRING!";
$segment_delimeter = "~";
$element_delimeter = "*";

//First break it into segments
$segments = explode($segment_delimiter, $edi);

//Now break each segment into elements
$segs_and_elems = array();
foreach($segments as $segment){
    $segs_and_elems[] = explode(element_delimeter, $segment);
}

//To echo out what type of EDI this is for example:
foreach($segs_and_elems as $seg){
    if($seg[0] == "GS"){ echo($seg[1]); }
}

?>

これがあなたが始めるのに役立つことを願っています。

于 2014-12-01T21:17:36.000 に答える
0

ヘッダー情報については、次のJavaを使用すると、基本的な情報を非常に簡単に取得できます。C#にも分割があり、コードは非常によく似ています

try {
    String sCurrentLine;
    fileContent = new BufferedReader(new FileReader(filePathName));

    sCurrentLine = fileContent.readLine();

    // get the delimiter after ISA, if you know your field delimiter just force it.
    // we look at lots of different senders messages so never sure what it will be.

    delimiterElement = sCurrentLine.substring(3,1); // Grab the delimiter they are using
    String[] splitMessage = sCurrentLine.split(delimiterElement,16); // to get the messages if everything is on one line of course
    senderQualifier = splitMessage[5]; //who sent something we need fixed qualifier
    senderID = splitMessage[6]; //who sent something we need fixed alias
    ISA = splitMessage[13]; // Control number
    testIndicator = splitMessage[15]; 
    dateStamp = splitMessage[9];  
    timeStamp = splitMessage[10];

    ... do stuff with the pieces of info ...
于 2016-09-23T12:16:06.620 に答える