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