.net拼音五笔助记符的实现

来源:互联网 发布:相机软件snow 编辑:程序博客网 时间:2024/04/28 00:03

微软的VS提供了Microsoft.International.Converters.PinYinConverter;可以通过他实现汉字到拼音的转换,然而没有五笔的转换。因工作需要,增加了五笔的转换。具体代码如下其中五笔助记符需要字库“PinYinWuBi.dll”,需要的朋友可以到我的资源中下载

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Microsoft.International.Converters.PinYinConverter;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Soft.Lib
{
    /// <summary>
    /// 拼音五笔助记符
    /// </summary>
    public class PyConverter
    {

        /// <summary>
        /// 获取拼音助记符
        /// </summary>
        /// <param name="chinese_text">要转换的字符串</param>
        /// <param name="len">输出助记符字符串最大长度</param>
        /// <returns></returns>
        public static string ToPy(string chinese_text, int len)
        {
            string rlt = "";
            char[] chrs = chinese_text.ToCharArray();
            foreach (char x in chrs)
            {
                if (ChineseChar.IsValidChar(x))
                {
                    rlt += new ChineseChar(x).Pinyins[0][0];
                }
                else
                    rlt += x;
            }
            if (rlt.Length > len)
                return rlt.Substring(0, len);
            else
                return rlt;
        }
        static DataTable tableWBPY = null;
        static object Lock = new object();
        static private DataTable TableWBPY
        {
            get
            {
                if (tableWBPY == null)
                {
                    lock (Lock)
                    {
                        byte[] myBD = File.ReadAllBytes(Path.GetFullPath("PinYinWuBi.dll"));
                        MemoryStream stream = new MemoryStream(myBD);
                        IFormatter format = new BinaryFormatter();
                        stream.Position = 0;
                        tableWBPY = (DataTable)format.Deserialize(stream);
                    }
                }
                return tableWBPY;
            }
        }
        /// <summary>
        /// 获取五笔助记符
        /// </summary>
        /// <param name="chinese_text">要转换的字符串</param>
        /// <param name="len">输出助记符字符串最大长度</param>
        /// <returns></returns>
        public static string ToWb(string chinese_text, int len)
        {
            string ret = "";  //返回字符串
            char[] chrs = chinese_text.ToCharArray();
            try
            {

                foreach (char x in chrs)
                {
                    DataRow[] rowF = TableWBPY.Select(string.Format("F1 = '{0}'", x));
                    if (rowF.Length != 0)
                    {
                        ret = ret + rowF[0]["f2"].ToString().Substring(0, 1).ToUpper();
                    }
                    else
                    {
                        ret = ret + x;
                    }
                }

            }
            catch (Exception ex)
            {
                ret = "";
            }
            if (ret.Length > len)
                return ret.Substring(0, len);
            else
                return ret;
        }
    }
}

原创粉丝点击