如何从 Edifact d96a .txt 文件中读取交货日期?
How do I read the delivery date from Edifact d96a .txt-file?
我在从随 EDI 发送的 .txt 文件中检索交货日期时遇到问题。
我的客户必须有机会在 .txt 文件中设置行:
'DTM+76:20160702:102
当他们从网站订购东西以设置未来交货的交货日期时。
我想获取日期(在本例中为 2016-07-02)并将其设置为交付日期变量(然后在数据库中设置)。
我正在考虑在 java 中使用 Scanner 来查看文件是否包含文本 "DTM:76" ,然后读取该行的日期部分,例如 Find a string (or a line) in a txt File Java 。是 possible/effective 使用 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
有什么建议吗?
我建议将模式匹配与正则表达式结合使用,以匹配有效行的出现,即 DTM+76: 后跟有效日期格式。
查看 JDoc:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
现在,如果找到匹配项,您可以轻松获取匹配项的日期部分(尾随 : 字符),然后将其添加到数据库中。
当我们解析 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 被拆分成段时,段定界符 '
将从每个段字符串中删除。将元素和组件拆分为单独的字符串时也是如此。
我在从随 EDI 发送的 .txt 文件中检索交货日期时遇到问题。
我的客户必须有机会在 .txt 文件中设置行:
'DTM+76:20160702:102
当他们从网站订购东西以设置未来交货的交货日期时。
我想获取日期(在本例中为 2016-07-02)并将其设置为交付日期变量(然后在数据库中设置)。
我正在考虑在 java 中使用 Scanner 来查看文件是否包含文本 "DTM:76" ,然后读取该行的日期部分,例如 Find a string (or a line) in a txt File Java 。是 possible/effective 使用 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
有什么建议吗?
我建议将模式匹配与正则表达式结合使用,以匹配有效行的出现,即 DTM+76: 后跟有效日期格式。
查看 JDoc:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
现在,如果找到匹配项,您可以轻松获取匹配项的日期部分(尾随 : 字符),然后将其添加到数据库中。
当我们解析 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 被拆分成段时,段定界符 '
将从每个段字符串中删除。将元素和组件拆分为单独的字符串时也是如此。