private static void DecodeFieldMap(string prefix, DataDictionary dd, StringBuilder str, string msgType, FieldMap fieldMap) { foreach (var kvp in fieldMap) { if (dd.IsGroup(msgType, kvp.Key)) { continue; } var field = dd.FieldsByTag[kvp.Key]; var value = fieldMap.GetString(field.Tag); if (dd.FieldHasValue(field.Tag, value)) { value = $"{field.EnumDict[value]} ({value})"; } str.AppendFormat("{0}{1} = {2};\n", prefix, field.Name, value); } foreach (var groupTag in fieldMap.GetGroupTags()) { var groupField = dd.FieldsByTag[groupTag]; str.AppendFormat("{0}{1} (count {2}) {{\n", prefix, groupField.Name, fieldMap.GetInt(groupTag)); for (var i = 1; i <= fieldMap.GetInt(groupTag); i++) { var group = fieldMap.GetGroup(i, groupTag); var groupPrefix = prefix + " "; str.AppendFormat("{0}{{\n", groupPrefix); DecodeFieldMap(groupPrefix + " ", dd, str, msgType, group); str.AppendFormat("{0}}},\n", groupPrefix); } str.Remove(str.Length - 2, 1); // Remove last "," str.AppendFormat("{0}}};\n", prefix); } }
public void Iterate(FieldMap map, string msgType) { DataDictionary.CheckHasNoRepeatedTags(map); // check non-group fields int lastField = 0; foreach (KeyValuePair <int, Fields.IField> kvp in map) { Fields.IField field = kvp.Value; if (lastField != 0 && field.Tag == lastField) { throw new RepeatedTag(lastField); } CheckHasValue(field); if (!string.IsNullOrEmpty(this.Version)) { CheckValidFormat(field); if (ShouldCheckTag(field)) { CheckValidTagNumber(field.Tag); CheckValue(field); if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this)) { CheckIsInMessage(field, msgType); CheckGroupCount(field, map, msgType); } } } lastField = field.Tag; } // check contents of each group foreach (int groupTag in map.GetGroupTags()) { if (!Message.IsHeaderField(groupTag, this) && !Message.IsTrailerField(groupTag, this)) { for (int i = 1; i <= map.GroupCount(groupTag); i++) { Group g = map.GetGroup(i, groupTag); DDGrp ddg = this.Messages[msgType].GetGroup(groupTag); IterateGroup(g, ddg, msgType); } } } }
public void Iterate(FieldMap map, string msgType) { DataDictionary.CheckHasNoRepeatedTags(map); // check non-group fields int lastField = 0; foreach (KeyValuePair<int, Fields.IField> kvp in map) { Fields.IField field = kvp.Value; if (lastField != 0 && field.Tag == lastField) throw new RepeatedTag(lastField); CheckHasValue(field); if (null != this.Version && this.Version.Length > 0) { CheckValidFormat(field); if (ShouldCheckTag(field)) { CheckValidTagNumber(field.Tag); CheckValue(field); if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this)) { CheckIsInMessage(field, msgType); CheckGroupCount(field, map, msgType); } } } lastField = field.Tag; } // check contents of each group foreach (int groupTag in map.GetGroupTags()) { for (int i = 1; i <= map.GroupCount(groupTag); i++) { Group g = map.GetGroup(i, groupTag); DDGrp ddg = this.Messages[msgType].GetGroup(groupTag); IterateGroup(g, ddg, msgType); } } }
public string toXMLFields(FieldMap fields, int space) { StringBuilder s = new StringBuilder(); string name = string.Empty; // fields foreach (var f in fields) { s.Append("<field "); if ((dataDictionary_ != null) && ( dataDictionary_.FieldsByTag.ContainsKey(f.Key))) { s.Append("name=\"" + dataDictionary_.FieldsByTag[f.Key].Name + "\" "); } s.Append("number=\"" + f.Key.ToString() + "\">"); s.Append("<![CDATA[" + f.Value.ToString() + "]]>"); s.Append("</field>"); } // now groups List<int> groupTags = fields.GetGroupTags(); foreach (int groupTag in groupTags) { for (int counter = 1; counter <= fields.GroupCount(groupTag); counter++) { s.Append("<group>"); s.Append( toXMLFields( fields.GetGroup(counter, groupTag), space+1)); s.Append("</group>"); } } return s.ToString(); }