예제 #1
0
        //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);
            }
        }
예제 #2
0
        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;
        }