如何使用欢笑Javascript删除HL7消息中的换行符?

如何使用欢笑Javascript删除HL7消息中的换行符?,javascript,hl7,mirth,Javascript,Hl7,Mirth,一条HL7消息发出笑声并抛出一个处理错误。在原始格式的消息的最底部是一个部分行,它与上面的行分离。每次我都必须手动更正此错误。我希望使用一个快乐的Javascript作为一个消息过滤器,可以解决这个问题,这样一切都可以在没有人为干预的情况下进行 下面的消息片段会触发错误。在本例中,它是HL7消息的最后一行 OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body|| ||||||F|||202254836969552||| 目前,我唯一的修复方法是

一条HL7消息发出笑声并抛出一个处理错误。在原始格式的消息的最底部是一个部分行,它与上面的行分离。每次我都必须手动更正此错误。我希望使用一个快乐的Javascript作为一个消息过滤器,可以解决这个问题,这样一切都可以在没有人为干预的情况下进行

下面的消息片段会触发错误。在本例中,它是HL7消息的最后一行

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||

||||||F|||202254836969552|||
目前,我唯一的修复方法是打开HL7消息,手动转到换行符,并将其调到其上方的行,该行是段的一部分

HL7消息应如下所示:

OBX|68|FT|PT1103&IMP^PET/CT Imaging Whole Body||||||||F|||20190327101958|||

移除通道的预处理器或附件脚本中的所有线路制动器,然后根据段名称将它们重新插入。
最好的方法是停止消息生成系统,将线路制动器插入OBX.5字段

根据您的问题,包含换行符的HL7字段是OBX5,1,它应该保存观察值

观测值可能包含作为数据一部分的换行符。默认情况下,换行符或ASCII 13是段分隔符。如果这是作为数据的一部分接收的,则在解析消息时会出现问题。这就是你在问题中提到的问题的根本原因

段分隔符。这总是一个马车返回。我在答覆中已详细解释这一点

理想情况下,在构建HL7消息时,这些换行符应替换为其转义序列。关于它的更多细节已经在我先前的一个答案中给出了

那么,您的入站消息

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||

||||||F|||202254836969552|||
应该是

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||\X0D\\X0D\||||||F|||202254836969552|||
关于如何使用Mirth/Javascript实现这一点的实际问题,在您的特定用例中应该不需要这样做。这个转换应该在发送消息给Mirth之前完成。因此,向您发送此消息的人应该像这样构建它

在UI上实际显示观察值时,您需要再次执行相反的过程

编辑:


如果换行符不同于ASCII 13,则应在\X0D\中替换相应的十六进制。我的链接答案中提到了细节;我不会在这里重复这些内容。

删除所有换行符将是一种方法,但以后可能会出现问题,您可以设置一个替换脚本,该脚本代替“/n”,搜索“|/n |”或类似字符串,这样可以修复该特定问题以及垂直分隔符之间的任何其他不需要的换行符,但是如果它在其他地方坏了也没用,所以请记住这一点。

这是有效的。将以下内容放入预处理器

message = message.replace(/[\r\n]+(?![A-Z][A-Z][A-Z0-9]\|)/g, "");

return message;

将此代码段放入预处理器脚本中。它对我有用

var newmessage = message.replace(/[\n\r]$/,"");

while (newmessage.match(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i)) {
    var extrabit = newmessage.match(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i)[0].substring(1);
    var newmessage = newmessage.replace(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i,'\\.br\\' + extrabit);
}

return newmessage;

Mirth processor希望前3个字符的每一行都包含有效的HL7段,否则Mirth会抛出错误

要删除HL7消息中的无效换行符,应遵循以下步骤

1.通道->脚本->预处理器

message = message.replace(/[\r\n]+(?![A-Z][A-Z][A-Z0-9]\|)/g, "");

return message;
将下面的代码粘贴在返回消息的顶部;陈述 message=message.replace/[\r\n]+?![A-Z][A-Z][A-Z0-9]\|/g//此行用于在附加到上一段的传入消息中无效的换行符。 保存更改并为受影响的新更改部署通道。
我有一个类似的问题,就是线段之间有空行,我这样解决了这个问题:

content = content.replace(/^\s*\n/gm, '');
注意:这只会删除空行。你仍然需要弄清楚如何在当前行上获得下一行


您可以尝试使用正则表达式来消除所有“\n”后面没有任何段。

如果在入站数据类型属性中关闭“转换换行符”,会发生什么情况?如果额外的换行符是\n个字符而不是\r,则可能会让它们通过。我关闭了“转换换行符”,它只处理消息而不出错,但不会解决问题。。。它只是忽略了它。我确实看到您可以在消息中单击鼠标右键并显示行结束符和所有段结束符,\r并且似乎以某种方式插入了OBX.5 a处的最后一行\n,打断了段。。。一位同事认为,可能发送方有一个像旧X光机一样的旧接口,它的输出也有这个接口……如果它在处理信息,问题是什么?下游的东西也有问题吗?如果需要,您可以使用mirth删除或替换OBX-5中的\n任何字符。它不会按原样处理消息。它抛出一个错误,如上面的原始帖子所示。我正试图找到一种方法来消除这个错误,这样就不需要人工干预了。当您说删除时\n您是说我可以添加一个javascript过滤器,用\r\n替换所有的。。。javascript会看到这一点吗?因为\n和\r是隐藏的?我对欢笑还不熟悉,所以我还不确定该怎么做。我可以很容易地在测试通道上测试它,但是您给出的步骤可以详细说明一个l 请稍等一下好吗?