如何从Edifact d96a .txt文件中读取交付日期?

时间:2016-06-02 07:59:25

标签: java edi edifact

我在从EDI发送的.txt文件中检索交付日期时遇到问题。

我的客户必须有机会在.txt文件中设置该行:

'DTM + 76:的 20160702 :102

当他们从网站订购某些东西时,设定未来交货的交货日期。

我想获取日期(在本例中为2016-07-02)并将其设置为deliveryDate-variable(然后在数据库中设置)。

我正在考虑在java中使用Scanner来查看文件是否包含文本“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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我建议使用与正则表达式匹配,以匹配有效行的出现,即DTM + 76:后跟有效的日期格式。

参见JDoc:

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

现在,如果找到匹配项,您可以轻松获取匹配项的日期部分(尾随:char),然后将其添加到DB。

答案 1 :(得分:1)

当我们解析EDIFACT时,我们将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中删除段定界符'。将元素和组件拆分为单独的字符串时也是如此。

相关问题