2016-06-02 4 views
1

EDIで送信された.txt-fileから配信日を取得する際に問題があります。Edifact d96a .txt-fileから納期を読み込むにはどうすればよいですか?

私の顧客は.TXTファイルに行を設定する機会を持っている:

「DTM + 76::102

を彼らが配信を設定するには、ウェブサイトから何かを注文するとき将来の配達のための日付。

私は日付(この場合は2016-07-02)を取得し、それをdeliveryDate変数に設定してから、データベースに設定します。

Javaでスキャナを使用してファイルに「DTM:76」というテキストが含まれているかどうかを確認してから、Find a string (or a line) in a txt File Javaのような行の日付部分を読み取ることを考えています。それはEDIで可能/有効か、それを行うためのより良い方法がありますか? http://www.gs1.org/sites/default/files/docs/eancom/ean02s4/part2/insdes/053.htm https://www.stylusstudio.com/edifact/D96A/ORDERS.htm

任意の提案:EDIおよび納期について

if (DTM+76:YYYYMMDD::102 exists) 
      { 
       //set the deliveryDate by getting only YYYYMMDD from DTM:76:20160702:102 
       deliveryDate= get..("20160702"); 
      } 

情報:

私にとって最善の解決策は、このようなものになるだろうか?

+1

'Smooks'や' EDIReader'解析ライブラリの使用をお勧めします。 – Stavr00

答えて

1

我々はEDIFACTsを解析する場合、我々は要素その後、セグメントにEDIFACTを分割し、これ等の正規表現を使用してコンポーネント:

String edi = "UNH+..."; // full edifact as string here 

// split EDIFACT string into segments 
String[] segments = edi.split("(?<!\?)'"); 

// loop through segments to find one beginning with DTM+ 
// lets assume its 3rd segment in array 
String dtmSegment = segments[2]; 

// split DTM segment to get its elements 
String[] dtmElements = dtmSegment.split("(?<!\?)\+"); 

// get date, time, period element 
String dtmElement = dtmElements[1]; 

// split dtmElement to get date/time/period components 
String[] dtmComponents = dtmElement.split("(?<!\?):"); 

// get date/time/period component value 
String deliveryDate = dtmComponents[1]; 

注:完全EDIFACTは、セグメントに分割され、セグメントデリミタ'各セグメント文字列から削除されます。要素とコンポーネントを個々のStringに分割する場合も同様です。

+0

完全なedifactはここで文字列としてどういう意味ですか? –

+1

あなたの場合、 '.split()'を実行する 'edi'文字列変数に.txtファイルの内容を解析します。 –

1

正規表現とのパターンマッチングを使用して、有効な行DTM + 76の出現を照合することをお勧めします。その後に有効な日付形式が続きます。

参照JDoc:一致が見つかった場合

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

、あなたは簡単に(末尾:チャー)試合の日付部分を取得することができ、その後DBに追加します。次いで

関連する問題