2016-06-02 3 views
1

У меня проблема с получением даты доставки из TXT-файла, отправленного с помощью EDI.Как узнать дату доставки из файла .txt-файла Edifact d96a?

Мои клиенты должны возможность установить линию в .txt-файл:

«DTM + 76: : 102

, когда они заказывают что-то на сайте, чтобы установить доставки дату будущих поставок.

Я хочу получить дату (в данном случае 2016-07-02) и установить ее в переменной deliveryDate (а затем установить ее в базе данных).

Я думаю об использовании сканера в java, чтобы увидеть, содержит ли файл текст «DTM: 76», а затем прочитал дату-часть строки, например, Find a string (or a line) in a txt File Java. Возможно ли/эффективно с EDI или есть лучший способ сделать это?

Лучшее решение для меня было бы что-то вроде этого:

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

Информация о EDI и сроков поставки: http://www.gs1.org/sites/default/files/docs/eancom/ean02s4/part2/insdes/053.htm https://www.stylusstudio.com/edifact/D96A/ORDERS.htm

Любые предложения?

+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 как string здесь? Я получаю edifact как .txt-файл в папке через ftp –

+1

В вашем случае вы проанализировали бы содержимое файла .txt в переменной 'edi' String, которую вы затем выполнили бы .split()' on. –

1

Я бы предложил использовать сопоставление шаблонов с регулярным выражением, чтобы соответствовать наличию допустимой строки, т. Е. DTM + 76: за ней следует действительный формат даты.

См JDoc:

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

Теперь, если обнаружено совпадение вы можете легко получить часть даты матча (волоча: полукокса), а затем добавить его в базу данных.

Смежные вопросы