//Load Data Record private void Load_DataRecord(ISO_8211_DataRecord dataRecord, int fullPos) { ISO_8211_Leader leader = dataRecord.leader; List<ISO_8211_Directory> dirList = dataRecord.directoryList; Dictionary<string, ISO_8211_Record_DataDesc> ddrList = ((ISO_8211_DataRecordHeader)recordList[0]).ddrList; dataRecord.records = new List<ISO_8211_Record_Field>(); byte[] recordBuff = new byte[leader.rl - leader.bafa]; Array.Copy(fullData, leader.bafa + fullPos, recordBuff, 0, leader.rl - leader.bafa); int unitPos = 0; for (int i = 0; i < dirList.Count; i++) { string recordTag = new string(dirList[i].Tag); ISO_8211_Record_DataDesc ddr = ddrList[recordTag]; ISO_8211_Record_Field record = new ISO_8211_Record_Field(); record.tag = recordTag; int fieldLength = dirList[i].Length; byte[] unitBuff = new byte[fieldLength]; Array.Copy(recordBuff, unitPos, unitBuff, 0, fieldLength); unitPos += fieldLength; int fieldPos = 0; if (ddr.array_desc_str[0].Equals('*')) { while (unitBuff[fieldPos] != (int)DELIMITERS.UT) { for (int k = 0; k < ddr.array_descriptions.Count; k++) { string tag = ddr.array_descriptions[k]; ISO_8211_Record_DataDesc.FormatControl fc = ddr.format_controls[k]; ISO_8211_Record_SubField subRecord = new ISO_8211_Record_SubField(); fieldPos = subRecordBinding(fc, unitBuff, fieldPos, subRecord); subRecord.tag = tag; record.subRecords.Add(subRecord); } } } else { for (int z = 0; z < ddr.array_descriptions.Count; z++) { string tag = ddr.array_descriptions[z]; ISO_8211_Record_DataDesc.FormatControl fc = ddr.format_controls[z]; int length = fc.length; if (tag[0].Equals('\\') && tag[1].Equals('*')) { string[] tags = tag.Substring(2).Split('!'); while (unitBuff[fieldPos] != (int)DELIMITERS.UT) { for (int k = 0; k < tags.Length; k++) { string nextTag = tags[k]; ISO_8211_Record_DataDesc.FormatControl nextFc = ddr.format_controls[z+k]; ISO_8211_Record_SubField subRecord = new ISO_8211_Record_SubField(); fieldPos = subRecordBinding(nextFc, unitBuff, fieldPos, subRecord); subRecord.tag = nextTag; record.subRecords.Add(subRecord); } } } else { ISO_8211_Record_SubField subRecord = new ISO_8211_Record_SubField(); fieldPos = subRecordBinding(fc, unitBuff, fieldPos, subRecord); subRecord.tag = tag; record.subRecords.Add(subRecord); } } } dataRecord.records.Add(record); } }
private ISO_8211_DataRecordBase LoadRecord(int fullPos) { ISO_8211_DataRecordBase record = null; ISO_8211_Leader leader = Load_Leader(fullPos); if (leader.LeaderIdentifier == 'L') { record = new ISO_8211_DataRecordHeader(); record.leader = leader; record.directoryList = Load_Directory(record.leader, fullPos); ((ISO_8211_DataRecordHeader)record).ddrList = Load_DataDescriptionRecord(((ISO_8211_DataRecordHeader)record).leader, ((ISO_8211_DataRecordHeader)record).directoryList, fullPos); } else if (leader.LeaderIdentifier == 'D' || leader.LeaderIdentifier == 'R') { record = new ISO_8211_DataRecord(); record.leader = leader; record.directoryList = Load_Directory(record.leader, fullPos); Load_DataRecord(((ISO_8211_DataRecord)record), fullPos); } return record; }