如何解决将字符串从EDIFACT文件解析到数据帧
我正在寻找有关应用最佳实践来解析R中的EDIFACT文件的建议。我有以下文件,该文件没有文件扩展名,但可以通过read.delim()
读取为文本。我的目标是解析文件夹中成千上万个这样的文件,从某些部分中提取信息,并将其写入数据框。
这是用'
分隔的原始格式。
UNB+UNOC:3+4388901324577+_GLN_supplier__+180101:0050+10870'UNH+10870+DELFOR:D:96A:UN'BGM+241+10870'DTM+137:20180101:102'NAD+BY+4399901361577::92++Customername+Address+City++ZIP+Country'NAD+SU+_GLN_supplier__::92++suppliername.+Address+City++ZIP+Country'UNS+D'NAD+XX'LIN+++55040203121:BP'PIA+1+Product_ID_1+Product_name_1'IMD+F++:::Product_details'QTY+113:3:PCE'SCC+4'DTM+2:20180115:102'QTY+113:1:PCE'SCC+4'DTM+2:20180122:102'QTY+113:4:PCE'SCC+4'DTM+2:20180129:102'QTY+113:3:PCE'SCC+4'DTM+2:20180205:102'LIN+++55040203121:BP'PIA+1+Product_ID_2+Product_name_2'IMD+F++:::Product_details'QTY+113:9:PCE'SCC+4'DTM+2:20180115:102'QTY+113:5:PCE'SCC+4'DTM+2:20180122:102'QTY+113:5:PCE'SCC+4'DTM+2:20180129:102'QTY+113:4:PCE'SCC+4'DTM+2:20180205:102'LIN+++55040203121:BP'PIA+1+Product_ID_3+Product_name_3'IMD+F++:::Product_details'QTY+113:4:PCE'SCC+4'DTM+2:20180115:102'QTY+113:5:PCE'SCC+4'DTM+2:20180122:102'QTY+113:10:PCE'SCC+4'DTM+2:20180129:102'QTY+113:4:PCE'SCC+4'DTM+2:20180205:102'UNS+S'UNT+549+10870'UNZ+1+10870'
为了提高可读性,这里是拆分格式。
UNB+UNOC:3+4388901324577+_GLN_supplier__+180101:0050+10870
UNH+10870+DELFOR:D:96A:UN
BGM+241+10870
DTM+137:20180101:102
NAD+BY+4399901361577::92++Customername+Address+City++ZIP+Country
NAD+SU+_GLN_supplier__::92++suppliername.+Address+City++ZIP+Country
UNS+D
NAD+XX
LIN+++55040203121:BP
PIA+1+Product_ID_1+Product_name_1
IMD+F++:::Product_details
QTY+113:3:PCE
SCC+4
DTM+2:20180115:102
QTY+113:1:PCE
SCC+4
DTM+2:20180122:102
QTY+113:4:PCE
SCC+4
DTM+2:20180129:102
QTY+113:3:PCE
SCC+4
DTM+2:20180205:102
LIN+++55040203121:BP
PIA+1+Product_ID_2+Product_name_2
IMD+F++:::Product_details
QTY+113:9:PCE
SCC+4
DTM+2:20180115:102
QTY+113:5:PCE
SCC+4
DTM+2:20180122:102
QTY+113:5:PCE
SCC+4
DTM+2:20180129:102
QTY+113:4:PCE
SCC+4
DTM+2:20180205:102
LIN+++55040203121:BP
PIA+1+Product_ID_3+Product_name_3
IMD+F++:::Product_details
QTY+113:4:PCE
SCC+4
DTM+2:20180115:102
QTY+113:5:PCE
SCC+4
DTM+2:20180122:102
QTY+113:10:PCE
SCC+4
DTM+2:20180129:102
QTY+113:4:PCE
SCC+4
DTM+2:20180205:102
UNS+S
UNT+549+10870
UNZ+1+10870
我将通过file_list
准备一个列表list.files()
并遍历file_list
的各项,以按以下顺序解析单个信息:
- 打开文件
- 由定界符分隔
- 寻找段
UNH+10870
,并返回+
和:
之间的结果 - 寻找段
DTM+137
,并返回:
和:
之间的结果 - 寻找段
PIA+1
,但我不确定该怎么做,因为这需要为QTY+113
段中每次出现的PIA+1
创建新行
通常,这种方法非常麻烦,并且会在每个文件上造成大量循环,并可能导致性能问题。
列的标题指示相关行。
+-----------+----------+--------------+----------------+---------+----------+
| UNH+10870 | DTM+137 | PIA+1_ID | PIA+1_NAME | QTY+113 | DTM+2 |
+-----------+----------+--------------+----------------+---------+----------+
| DELFOR | 20180101 | Product_ID_1 | Product_name_1 | 3 | 20180115 |
| DELFOR | 20180101 | Product_ID_1 | Product_name_1 | 1 | 20180122 |
| DELFOR | 20180101 | Product_ID_1 | Product_name_1 | 4 | 20180129 |
| DELFOR | 20180101 | Product_ID_1 | Product_name_1 | 3 | 20180205 |
| DELFOR | 20180101 | Product_ID_2 | Product_name_2 | 9 | 20180115 |
| DELFOR | 20180101 | Product_ID_2 | Product_name_2 | 5 | 20180122 |
| DELFOR | 20180101 | Product_ID_2 | Product_name_2 | 5 | 20180129 |
| DELFOR | 20180101 | Product_ID_2 | Product_name_2 | 4 | 20180205 |
| DELFOR | 20180101 | Product_ID_3 | Product_name_3 | 4 | 20180115 |
| DELFOR | 20180101 | Product_ID_3 | Product_name_3 | 5 | 20180122 |
| DELFOR | 20180101 | Product_ID_3 | Product_name_3 | 10 | 20180129 |
| DELFOR | 20180101 | Product_ID_3 | Product_name_3 | 4 | 20180205 |
+-----------+----------+--------------+----------------+---------+----------+
我希望我对任务进行了充分的解释,并感谢每一个建议都能完成任务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。