没有正确处理 HL7 文档中的行?
Not properly processing lines in an HL7 document?
我有一个脚本应该检查每行的前 4 个字符。它不工作。我正在处理如下所示的 HL7 文档:
MSH|...
EVN|...
PID|...
MSH|...
EVN|...
PID|...
MSH|...
EVN|...
PID|...
这是我的代码:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile (f.path, 1)
Do Until file.AtEndOfStream
line = file.Readline
wscript.echo left(line,4)
Loop
这将输出以下内容:
MSH|
MSH|
MSH|
除了Readline
还有什么我应该使用的吗?
我最终使用 emeditor 的 replace in files
功能将 \r
的所有实例替换为 \r\n
。这似乎解决了这个问题。
为另一项任务重新审视此问题并找到了更好的方法。以下一组循环和条件会将充满 HL7 消息的 .dat 文件分解为消息、段、字段和子字段。它不考虑重复字段 (~)。
前两个 FOR
语句解决了换行与回车 returns 的原始问题。原来每条消息之间有一个lf,每段之间有一个cr。
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
file = fso.OpenTextFile(f.path).ReadAll
for each msg in split(file,vbLf)
if msg <> "" then
msgType = split(split(msg,"|")(8),"^")(1) 'results in something like A08
for each line in split(msg,vbCr)
if line <> "" then
seg = left(line,3) 'MSH, PID, etc
for each field in split(line,"|")
if instr(field,"^") > 0 then
for each subfield in split(field,"^")
'do code here for each subfield
next
end if
next
end if
next
end if
next
我有一个脚本应该检查每行的前 4 个字符。它不工作。我正在处理如下所示的 HL7 文档:
MSH|...
EVN|...
PID|...
MSH|...
EVN|...
PID|...
MSH|...
EVN|...
PID|...
这是我的代码:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile (f.path, 1)
Do Until file.AtEndOfStream
line = file.Readline
wscript.echo left(line,4)
Loop
这将输出以下内容:
MSH|
MSH|
MSH|
除了Readline
还有什么我应该使用的吗?
我最终使用 emeditor 的 replace in files
功能将 \r
的所有实例替换为 \r\n
。这似乎解决了这个问题。
为另一项任务重新审视此问题并找到了更好的方法。以下一组循环和条件会将充满 HL7 消息的 .dat 文件分解为消息、段、字段和子字段。它不考虑重复字段 (~)。
前两个 FOR
语句解决了换行与回车 returns 的原始问题。原来每条消息之间有一个lf,每段之间有一个cr。
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
file = fso.OpenTextFile(f.path).ReadAll
for each msg in split(file,vbLf)
if msg <> "" then
msgType = split(split(msg,"|")(8),"^")(1) 'results in something like A08
for each line in split(msg,vbCr)
if line <> "" then
seg = left(line,3) 'MSH, PID, etc
for each field in split(line,"|")
if instr(field,"^") > 0 then
for each subfield in split(field,"^")
'do code here for each subfield
next
end if
next
end if
next
end if
next