gpt4 book ai didi

java - 在控制台中打印 HL7 消息

转载 作者:行者123 更新时间:2023-11-30 04:56:55 25 4
gpt4 key购买 nike

我将一个对象传递给构造函数,然后将该对象的参数添加到 HL7。ORU_R01 是 HL7 的类型。当我将 HL7 打印到控制台时,仅打印最后一个 OBX。我的代码有什么问题吗?我如何将此 HL7 消息写入套接字?java中有没有更简单的方法来处理HL7?

public class FlexSMessageHL7 {
private FileWriter writeHL7ToFile;
private PrismaflexSMessage sMessage;
private ORU_R01 message;
private int i = 0;
private OBX obx = null;

public FlexSMessageHL7(FlexSMessage sMessage) {
this.sMessage = sMessage;
this.message = new ORU_R01();
createHL7SMessage();
}

public void createHL7SMessage() {

// Populate the MSH Segment
MSH msh = message.getMSH();
try {
msh.getFieldSeparator().setValue("|");
msh.getEncodingCharacters().setValue("^~\\&");
msh.getDateTimeOfMessage().setValue(sMessage.getTime().toString());
msh.getSendingApplication().getNamespaceID().setValue(String.valueOf(sMessage.getMachID()));
} catch (DataTypeException e) {
e.printStackTrace();
}

// Populate the OBR Segment:time
OBR obr = message.getPATIENT_RESULT().getORDER_OBSERVATION().getOBR();
try {
obr.getObservationDateTime().setValue(String.valueOf(sMessage.getTime()));
} catch (DataTypeException e) {
e.printStackTrace();
}

// Populate the PID Segment:PatientId
PID pid = message.getPATIENT_RESULT().getPATIENT().getPID();
try {
pid.getPatientID().getIDNumber().setValue(sMessage.getPatID());
} catch (HL7Exception e) {
e.printStackTrace();
}

// Populate the OBX Segment:Param_Code, time, Measure_Value
while (i < sMessage.getMsgInfo()) {
for (PrismaflexSRecord sRecord : sMessage.getsRecordCollection()) {
try {
obx = message.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION(i).getOBX();
obx.getSetIDOBX().setValue(String.valueOf(i));
obx.getObservationIdentifier().getIdentifier().setValue(sRecord.getParamCode());
obx.getDateTimeOfTheObservation().setValue(String.valueOf(sRecord.getTimeStamp()));
obx.getObservationIdentifier().getNameOfCodingSystem().setValue(String.valueOf(sRecord.getMeasureValue()));
i++;
} catch (HL7Exception e) {
e.printStackTrace();
}
}

}
try {
writeHL7ToFile = new FileWriter(File.createTempFile("prismaflexOutputFrom3001HL7", "txt", new File
("c:\\tmp\\prismaflex")));
writeHL7ToFile.write(message.getMSH().toString());
writeHL7ToFile.flush();
} catch (IOException e) {
e.printStackTrace();
}

// Now, Encode the message and look at the output
try {

Parser parser = new PipeParser();
String encodedMessage = parser.encode(message);
System.out.println("Printing HL7 Encoded Message:");
System.out.println(encodedMessage);
} catch (HL7Exception e) {
e.printStackTrace();
}
}

}

最佳答案

正如 Nicholas Orlowski 指出的,问题出在行结束字符上,根据 HL7 标准,这些字符是 CR 字符,这使得 Windows 命令提示符只能将光标重置到行开头,并用下一行的内容覆盖它。因此,对于控制台输出,您需要将行结尾替换为其他内容。

对于最近使用 HAPI 的 HL7 应用程序(您似乎也在使用该应用程序),我制作了一个小辅助方法来实现此功能:

private static String replaceNewlines(String input) {
return input.replaceAll("\\r", "\n");
}

该函数可在所有平台上使用,因为它将 CR 字符替换为操作系统特定的换行符。

然后我可以使用它输出到控制台,如下所示:

LOGGER.trace("Generated message contents:\n" + replaceNewlines(outMessage.encode()));

在本例中,我使用 log4j 记录到控制台,而不是简单的控制台打印输出,但问题对我来说是一样的。

希望对你有帮助!

关于java - 在控制台中打印 HL7 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com