예제 #1
0
 private void ParseVariableDataFields(List <string[]> varDataEntries, ref List <c_MarcField> v_fieldList)
 {
     foreach (var entry in varDataEntries)
     {
         if (entry[0].Length != 3)
         {
             continue;                       // validation.
         }
         if (entry[1].Length != 1)
         {
             continue;                       // validation.
         }
         if (entry[2].Length != 1)
         {
             continue;                       // validation.
         }
         if (entry[3].Length == 0)
         {
             continue;                       // validation.
         }
         var field = new c_MarcVariableDataField(entry[0].Substring(0, 3));
         field.v_Indicator1 = entry[1];
         field.v_Indicator2 = entry[2];
         var parts = entry[3].Split(c_MarcSymbols.c_Human.v_Delimiter, StringSplitOptions.RemoveEmptyEntries);
         if (parts.Length == 0 || parts[0].Length < 3)
         {
             continue;                                           // validation.
         }
         foreach (var part in parts)
         {
             var subfieldId   = part.Substring(0, 1);
             var subfieldData = part == parts.Last() ? part.Substring(2) : part.Substring(2, part.Length - 3);
             var subfield     = new c_MarcSubfield(subfieldId, subfieldData);
             field.v_SubfieldList.Add(subfield);
         }
         v_fieldList.Add(field);
     }
 }
        internal static c_MarcDirectory.DirFieldEntry m_RepackVariableDataField(c_MarcVariableData v_field)
        {
            var v_dirEntry = new c_MarcDirectory.DirFieldEntry();

            var v_parts = string.Join("", v_dirEntry.DataChars).Split(new[] { c_MarcSymbols.c_Machine.v_Delimiter, c_MarcSymbols.c_Machine.v_FieldTerminator }, StringSplitOptions.RemoveEmptyEntries);

            if (v_parts.Length < 2 || v_parts[0].Length != 2 || v_parts[1].Length < 2)
            {
                return(null);
            }

            // parse indicator:
            v_field.Indicator1 = v_parts[0][0];
            v_field.Indicator2 = v_parts[0][1];

            // parse subfields:
            foreach (var v_part in v_parts.Skip(1))
            {
                var v_subfield = new c_MarcSubfield(v_part[0].ToString(), v_part.Substring(1));
                v_field.SubfieldList.Add(v_subfield);
            }

            return(v_dirEntry);
        }
예제 #3
0
        internal static MarcVariableData GetVariableDataField(MarcDirectory.DirFieldEntry dirEntry)
        {
            var field = new MarcVariableData(dirEntry.Id);

            var parts = string.Join("", dirEntry.DataChars).Split(new[] { c_MarcSymbols.c_Machine.v_Delimiter, c_MarcSymbols.c_Machine.v_FieldTerminator }, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length < 2 || parts[0].Length != 2 || parts[1].Length < 2)
            {
                return(null);
            }

            // parse indicator:
            field.Indicator1 = parts[0][0];
            field.Indicator2 = parts[0][1];

            // parse subfields:
            foreach (var part in parts.Skip(1))
            {
                var subfield = new c_MarcSubfield(part[0].ToString(), part.Substring(1));
                field.SubfieldList.Add(subfield);
            }

            return(field);
        }