void populateData(ASTM_Record r, TreeNode n, int fromIdx=1) { for (int fi = fromIdx; fi <= r.fieldsCount(); fi++) { if (r.fieldValue(fi) != null && r.fieldValue(fi).Length > 0) n.Nodes.Add(r.fieldName(fi) + ":\t" + r.fieldValue(fi)); } if (r.comments()!=null) { foreach (ASTM_Comment c in r.comments()) { TreeNode curCommentNode = n.Nodes.Add("Comment"); for (int fi = fromIdx; fi <= c.fieldsCount(); fi++) { if (c.fieldValue(fi) != null && c.fieldValue(fi).Length > 0) curCommentNode.Nodes.Add(c.fieldName(fi) + ":\t" + c.fieldValue(fi)); } } } if (r.manufacturerInfo() != null) { foreach (ASTM_Manufacturer m in r.manufacturerInfo()) { TreeNode curManNode = n.Nodes.Add("Manufacturer Info"); for (int fi = fromIdx; fi <= m.fieldsCount(); fi++) { if (m.fieldValue(fi) != null && m.fieldValue(fi).Length > 0) curManNode.Nodes.Add(m.fieldName(fi) + ":\t" + m.fieldValue(fi)); } } } }
public void parse(String astmData, ref List <ASTM_Message> messages) { var lines = Regex.Split(astmData, "\r\n|\r|\n"); ASTM_Message m = null; ASTM_Record curRec = null; foreach (var l in lines) { var entries = Regex.Split(l, "[|]"); switch (entries.ElementAt(0)) { case "H": messages.Add(new ASTM_Message()); m = messages.Last(); curRec = m; curRec.parseData(l); break; case "P": if (m != null) { m.patientRecords.Add(new ASTM_Patient()); curRec = m.patientRecords.Last(); curRec.parseData(l); } else { //TODO Error } break; case "O": if (m != null) { if (m.patientRecords.Count > 0 && m.patientRecords.Last() != null) { m.patientRecords.Last().orderRecords.Add(new ASTM_Order()); curRec = m.patientRecords.Last().orderRecords.Last(); curRec.parseData(l); } else { //TODO Error: no patient } } else { //TODO Error } break; case "R": if (m != null) { if (m.patientRecords.Count > 0 && m.patientRecords.Last() != null) { if (m.patientRecords.Last().orderRecords.Count > 0 && m.patientRecords.Last().orderRecords.Last() != null) { m.patientRecords.Last().orderRecords.Last().resultRecords.Add(new ASTM_Result()); curRec = m.patientRecords.Last().orderRecords.Last().resultRecords.Last(); curRec.parseData(l); } } else { //TODO Error: no patient } } else { //TODO Error } break; case "Q": if (m != null) { m.requestRecords.Add(new ASTM_Request()); curRec = m.requestRecords.Last(); curRec.parseData(l); } else { //TODO Error } break; case "C": if (curRec != null) { curRec.addComment(l); } else { //TODO Error } break; case "M": if (curRec != null) { curRec.addManufacturerInfo(l); } else { //TODO Error } break; case "L": if (m != null) { curRec = null; m = null; } else { //TODO Error } break; default: //TODO Warning unknown record, store in message break; } } }