我在 EDI 领域工作,希望获得一些关于 EDIFACT 宏的帮助,以使 EDIFACT 文件更具可读性。
消息如下所示:
data'data'data'data'
我想让宏将结构转换为:
data'
data'
data'
data'
请让我知道如何做到这一点。提前致谢!
BR乔纳斯
如果您只想以更易读的格式查看文件,请尝试下载Softshare EDI 记事本。这是一个相当好的工具,它支持 X12、EDIFACT 和 TRADACOMS 标准,而且是免费的。
在 VIM 中替换(假设正在使用 UNOA 字符集的标准 EDIFACT 分隔符/转义字符):
:s/\([^?]'\)\(.\)/\1\r\2/g
分解正则表达式:
\([^?]'\)
- 搜索'
除(标准转义字符)之外的任何字符之后出现的字符?
,并将这两个字符捕获为第一个原子。这些是每个段的最后两个字符。
\(.\)
- 捕获段终止符之后的任何单个字符(即,如果段终止符已经在行尾,则不匹配)
然后用段终止符和下一段开头之间的新行替换这一行上的所有匹配项。
否则你可能会得到这个:
...
FTX+AAR+++FORWARDING?: Freight under Vendor?'
s care.'
NAD+BY+9312345123452'
CTA+PD+0001:Terence Trent D?'
Arby'
...
而不是这个:
...
FTX+AAR+++FORWARDING?: Freight under Vendor?'s care .'
NAD+BY+9312345123452'
CTA+PD+0001:Terence Trent D?'Arby'
...
这是你想要的?
Option Explicit
Dim stmOutput: Set stmOutput = CreateObject("ADODB.Stream")
stmOutput.Open
stmOutput.Type = 2 'adTypeText
stmOutput.Charset = "us-ascii"
Dim stm: Set stm = CreateObject("ADODB.Stream")
stm.Type = 1 'adTypeBinary
stm.Open
stm.LoadFromFile "EDIFACT.txt"
stm.Position = 0
stm.Type = 2 'adTypeText
stm.Charset = "us-ascii"
Dim c: c = ""
Do Until stm.EOS
c = stm.ReadText(1)
Select Case c
Case Chr(39)
stmOutput.WriteText c & vbCrLf
Case Else
stmOutput.WriteText c
End Select
Loop
stm.Close
Set stm = Nothing
stmOutput.SaveToFile "EDIFACT.with-CRLF.txt"
stmOutput.Close
Set stmOutput = Nothing
WScript.Echo "Done."