コード例 #1
0
ファイル: MarcQuery.cs プロジェクト: renyh/dp2mini
        /// <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);
        }
コード例 #2
0
ファイル: MarcQuery.cs プロジェクト: renyh1013/dp2
        /// <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;
        }