//ISO8211 레코드 데이터 포맷 처리 함수 private Type ReadDataOfDataFormat(ISO_8211_Record_DataDesc.FORMAT_CONTROL fORMAT_CONTROL) { switch (fORMAT_CONTROL) { case ISO_8211_Record_DataDesc.FORMAT_CONTROL.A: return typeof(string); case ISO_8211_Record_DataDesc.FORMAT_CONTROL.I: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.R: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.B: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b1: return typeof(uint); case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b2: return typeof(int); case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b4: return typeof(double); default: break; } return null; }
private int subRecordBinding(ISO_8211_Record_DataDesc.FormatControl fc, byte[] unitBuff, int fieldPos,ISO_8211_Record_SubField subRecord) { int length = fc.length; byte[] buff; switch (fc.type) { case ISO_8211_Record_DataDesc.FORMAT_CONTROL.A: StringBuilder sb = new StringBuilder(); char ch; if (length == 0) { while ((ch =Convert.ToChar(unitBuff[fieldPos++])) != (char)DELIMITERS.FT) sb.Append(ch); } else { for (int t = 0; t < length; t++) { ch = Convert.ToChar(unitBuff[fieldPos++]); sb.Append(ch); } } subRecord.type = ISO_8211_Record_DataDesc.FORMAT_CONTROL.A; subRecord.value = Encoding.ASCII.GetBytes(sb.ToString()); break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.I: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.R: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.B: break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b1: buff = new byte[length]; Array.Copy(unitBuff, fieldPos, buff, 0, length); fieldPos += length; subRecord.type = ISO_8211_Record_DataDesc.FORMAT_CONTROL.b1; subRecord.value = buff; break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b2: buff = new byte[length]; Array.Copy(unitBuff, fieldPos, buff, 0, length); fieldPos += length; subRecord.type = ISO_8211_Record_DataDesc.FORMAT_CONTROL.b2; subRecord.value = buff; break; case ISO_8211_Record_DataDesc.FORMAT_CONTROL.b4: buff = new byte[length]; Array.Copy(unitBuff, fieldPos, buff, 0, length); fieldPos += length; subRecord.type = ISO_8211_Record_DataDesc.FORMAT_CONTROL.b4; subRecord.value = buff; break; default: break; } return fieldPos; }
//Load DataDescriptions Record private Dictionary<string, ISO_8211_Record_DataDesc> Load_DataDescriptionRecord(ISO_8211_Leader leader, List<ISO_8211_Directory> dirList, int fullPos) { Dictionary<string, ISO_8211_Record_DataDesc> descList = new Dictionary<string, ISO_8211_Record_DataDesc>(); int descPos = leader.bafa+fullPos; ISO_8211_Directory entry; int sp = 0; int ep = 0; for (int i = 0; i < dirList.Count; i++) { entry = dirList[i]; sp = descPos; ep = descPos; ISO_8211_Record_DataDesc desc = new ISO_8211_Record_DataDesc(); //Field controls while (fullData[ep++] != (int)DELIMITERS.FCT) ; char[] fieldControlBuff = new char[ep - sp]; Array.Copy(fullData, sp, fieldControlBuff, 0, ep - sp); desc.field_control = fieldControlBuff; sp = ep; //Console.WriteLine("Field Controls : " + new string(fieldControlBuff)); //DataField name while (fullData[ep++] != (int)DELIMITERS.FT) ; char[] dataFieldNameBuff = new char[ep - sp]; Array.Copy(fullData, sp, dataFieldNameBuff, 0, ep - sp); desc.field_name = new string(dataFieldNameBuff); sp = ep; //Console.WriteLine("DataField name : " + new string(dataFieldNameBuff)); //Array descriptor while (fullData[ep++] != (int)DELIMITERS.UT) ; char[] arrayDescStrBuff = new char[ep - sp]; Array.Copy(fullData, sp, arrayDescStrBuff, 0, ep - sp); if (arrayDescStrBuff.Contains((char)DELIMITERS.FT)) { int arrayDescIndex = 0; while (arrayDescStrBuff[arrayDescIndex++] != (char)DELIMITERS.FT) ; char[] arrayDescBuff = new char[arrayDescIndex]; Array.Copy(arrayDescStrBuff, 0, arrayDescBuff, 0, arrayDescIndex); desc.array_desc_str = new string(arrayDescBuff); desc.array_descriptions = SplitArrayDescStr(desc.array_desc_str,leader.sizeOfFieldTagField-48); //Console.WriteLine("Array descriptor : " + desc.array_desc_str); int typeIndex = arrayDescIndex; while (arrayDescStrBuff[typeIndex++] != (char)DELIMITERS.UT) ; char[] fmfBuff = new char[typeIndex - arrayDescIndex]; Array.Copy(arrayDescStrBuff, arrayDescIndex, fmfBuff, 0, typeIndex - arrayDescIndex); desc.format_control_str = new string(fmfBuff); desc.format_controls = SplitFormatControlStr(desc.format_control_str); //Console.WriteLine("Format Control : " + desc.format_control_str); } else { desc.array_desc_str = new string(arrayDescStrBuff); desc.array_descriptions = SplitArrayDescStr(desc.array_desc_str, leader.sizeOfFieldTagField - 48); //Console.WriteLine("Array descriptor : " + desc.array_desc_str.ToString()); } descList.Add(new string(dirList[i].Tag),desc); descPos = descPos + entry.Length; //Console.WriteLine(); } return descList; }