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); }
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); }