我使用hl7parser来解析ADM文件。
文档说明要创建一个新的Message对象,应该传递一个字符串:
var message = hl7parser.create("MSH|^~\&|||||20121031232617||ADT^A04|20381|P|2.3||||NE\rEVN|A04|20121031162617||01\rPID|1|16194|16194||Jones^Bob");
请注意,字符串使用'\r'
来分隔段(MSH,EVN,PID)。
我从服务器获取数据,例如返回以下数据。
MSH|^~\&|EPICADT|DH|LABADT|DH|201301011226||ADT^A01|HL7MSG00001|P|2.3.1|
EVN|A01|201301011223||
PID|||MRN12345^5^M11||APPLESEED^JOHN^A^III||19710101|M||C|1 CATALYZE STREET^^MADISON^WI^53005-1020|GL|(414)379-1212|(414)271-3434||S||MRN12345001^2^M10|123456789|987654^NC|
NK1|1|APPLESEED^BARBARA^J|WIFE||||||NK^NEXT OF KIN
PV1|1|I|2000^2012^01||||004777^GOOD^SIDNEY^J.|||SUR||||ADM|A0|
将\n
替换为\r
replace()
并不能使解析工作正常,split('\n')
和join('\r')
也不会。
我注意到在记录示例中传递的字符串和替换为\r
在示例中使用字符串:
PID|1|16194|16194||Jones^BobADT^A04|20381|P|2.3||||NE
由于\r
字符
使用我的替换方法:
PID|||MRN12345^5^M11||APPLESEED^JOHN^A^III||19710101|M||C|1 CATALYZE STREET^^MADISON^WI^53005-1020|GL|(414)379-1PV1|1|I|2000^2012^01||||004777^GOOD^SIDNEY^J.|||SUR||||ADM|A0|
打印整个字符串,而不仅仅是最后一段。
我不确定打印时为何会有区别。传递带有\r
字符的文字字符串和"添加"之间是否有区别? \r
到一个字符串?
答案 0 :(得分:0)
这样做应该有效:
const lines = "A\nB\nC";
const result = lines.split("\n").join("\r");
console.log(result);
混淆可能来自它看起来没有,因为它看起来只是输出ABC
。
但是,如果我们检查生成的字符串的长度:
const lines = "A\nB\nC";
const result = lines.split("\n").join("\r");
console.log(result);
console.log(result.length);
请注意,它长5个字符,而不是3. \r
就在那里。只是当它输出到大多数事物时,它基本上被隐藏了,因为\r
并不真正呈现给任何东西。
这是一个“回车”,只有MacOS(在X之前)将它用作换行符。 Windows使用\r\n
的组合来呈现换行符,而Linux(和MacOSX)使用\n
。
如果它想要在字符串\r
中明确显示,那么您需要使用转义的(虽然这几乎肯定不是它所期望的):
const lines = "A\nB\nC";
const result = lines.split("\n").join("\\r");
console.log(result);
console.log(result.length);
答案 1 :(得分:0)
function replaceLfWithCr(text){ return text.replace(/ \ n / g,'\ r'); }