/// <summary> /// 根据机内格式 MARC 字符串,创建若干 MarcInnerField 对象 /// </summary> /// <param name="strText">MARC 机内格式字符串。代表内嵌字段的那个局部。例如 "$1200 $axxxx$fxxxx$1225 $axxxx"</param> /// <param name="strLeadingString">返回引导字符串。也就是第一个子字段符号前的部分</param> /// <returns>新创建的 MarcInnerField 对象数组</returns> public static MarcNodeList createInnerFields( string strText, out string strLeadingString) { strLeadingString = ""; MarcNodeList results = new MarcNodeList(); strText = strText.Replace(SUBFLD + "1", FLDEND); List <string> segments = new List <string>(); StringBuilder prefix = new StringBuilder(); // 第一个 30 出现以前的一段文字 StringBuilder segment = new StringBuilder(); // 正在追加的内容段落 for (int i = 0; i < strText.Length; i++) { char ch = strText[i]; if (ch == FLDEND[0]) { // 如果先前有累积的,推走 if (segment.Length > 0) { segments.Add(segment.ToString()); segment.Clear(); } //segment.Append(ch); segment.Append(SUBFLD + "1"); } else { if (segment.Length > 0 || segments.Count > 0) { segment.Append(ch); } else { prefix.Append(ch);// 第一个子字段符号以前的内容放在这里 } } } if (segment.Length > 0) { segments.Add(segment.ToString()); segment.Clear(); } if (prefix.Length > 0) { strLeadingString = prefix.ToString(); } foreach (string s in segments) { string strSegment = s; MarcInnerField field = null; field = new MarcInnerField(); // 如果长度不足 5 字符,补齐 // 5 字符是 $1200 的意思 if (strSegment.Length < 5) { strSegment = strSegment.PadRight(5, '?'); } field.Text = strSegment; results.add(field); // Debug.Assert(field.Parent == parent, ""); } return(results); }
/// <summary> /// 根据机内格式 MARC 字符串,创建若干 MarcInnerField 对象 /// </summary> /// <param name="strText">MARC 机内格式字符串。代表内嵌字段的那个局部。例如 "$1200 $axxxx$fxxxx$1225 $axxxx"</param> /// <param name="strLeadingString">返回引导字符串。也就是第一个子字段符号前的部分</param> /// <returns>新创建的 MarcInnerField 对象数组</returns> public static MarcNodeList createInnerFields( string strText, out string strLeadingString) { strLeadingString = ""; MarcNodeList results = new MarcNodeList(); strText = strText.Replace(SUBFLD + "1", FLDEND); List<string> segments = new List<string>(); StringBuilder prefix = new StringBuilder(); // 第一个 30 出现以前的一段文字 StringBuilder segment = new StringBuilder(); // 正在追加的内容段落 for (int i = 0; i < strText.Length; i++) { char ch = strText[i]; if (ch == FLDEND[0]) { // 如果先前有累积的,推走 if (segment.Length > 0) { segments.Add(segment.ToString()); segment.Clear(); } //segment.Append(ch); segment.Append(SUBFLD + "1"); } else { if (segment.Length > 0 || segments.Count > 0) segment.Append(ch); else prefix.Append(ch);// 第一个子字段符号以前的内容放在这里 } } if (segment.Length > 0) { segments.Add(segment.ToString()); segment.Clear(); } if (prefix.Length > 0) strLeadingString = prefix.ToString(); foreach (string s in segments) { string strSegment = s; MarcInnerField field = null; field = new MarcInnerField(); // 如果长度不足 5 字符,补齐 // 5 字符是 $1200 的意思 if (strSegment.Length < 5) strSegment = strSegment.PadRight(5, '?'); field.Text = strSegment; results.add(field); // Debug.Assert(field.Parent == parent, ""); } return results; }