using Furion;
using System.Text;
namespace Admin.NET.Application
{
///
/// Éú³ÉÖú¼ÇÂë
///
public class MnemonicCodeHelper
{
private struct ItemWord
{
public int numFlag; //ÊÇ·ñ¶àÒô×Ö
public char strWord; //µ±Ç°µ¥´Ê
public string strSpell1;//ÊäÈëÂë1
public string strSpell2;//ÊäÈëÂë2
public string strExt; //¶àÒô×Ö±£Áô´®
public string strName; //ÓÃÓÚ¶¨ÒåÐÕÊÏÂë
}
private static readonly int INTMAX = 65536;
private static ItemWord[] stWord = new ItemWord[INTMAX];
private static Boolean b_LoadData = false;
//¶ÁÈ¡ËùÓкº×Ö
public static Boolean fun_LoadWords()
{
int i, numIndex;
int numCount1, numCount2;
string strFileName;
char[] chrWord;
if (b_LoadData)
return true;
//ÒÔϳõʼ»¯ËùÓеÄÊý¾Ý
for (i = 0; i < INTMAX; i++)
{
stWord[i].numFlag = 0;
stWord[i].strSpell1 = "";
stWord[i].strSpell2 = "";
stWord[i].strName = "";
stWord[i].strExt = "|";
}
var rootPath = System.IO.Path.Combine(App.WebHostEnvironment.WebRootPath, "ChineseSpellFile");
//¶ÁÈ¡ºº×ÖÆ´Òô
strFileName = rootPath + @"\hzpy1.txt";
StreamReader srFile = new StreamReader(strFileName, Encoding.ASCII);
string strInput = null;
numCount1 = 0;
while ((strInput = srFile.ReadLine()) != null)
{
chrWord = strInput.ToCharArray();
numIndex = (int)chrWord[0];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
stWord[numIndex].strWord = chrWord[0];
stWord[numIndex].strSpell1 = chrWord[2].ToString();
numCount1++;
}
srFile.Close();
//¶ÁÈ¡¶àÒô×Ö
strFileName = rootPath + @"\hzpy2.txt";
srFile = new StreamReader(strFileName, Encoding.ASCII);
while ((strInput = srFile.ReadLine()) != null)
{
chrWord = strInput.ToCharArray();
numIndex = (int)chrWord[0];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
stWord[numIndex].numFlag = 1;
strInput = strInput.Substring(2);
strInput = strInput.Replace("\t", " ");
while (strInput.IndexOf(" ") >= 0)
{
strInput = strInput.Replace(" ", " ");
}
strInput = strInput.Replace(" ", "/");
stWord[numIndex].strExt = stWord[numIndex].strExt + strInput + "|";
}
srFile.Close();
//¶ÁÈ¡ÐÕÊÏ
strFileName = rootPath + @"\hzpy3.txt";
srFile = new StreamReader(strFileName, Encoding.ASCII);
while ((strInput = srFile.ReadLine()) != null)
{
chrWord = strInput.ToCharArray();
numIndex = (int)chrWord[0];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
stWord[numIndex].numFlag = 1;
strInput = strInput.Substring(2);
strInput = strInput.Replace("\t", " ");
while (strInput.IndexOf(" ") >= 0)
{
strInput = strInput.Replace(" ", " ");
}
stWord[numIndex].strName = strInput;
}
srFile.Close();
//ÒÔϲ¿·Ö¶ÁÈ¡Îå±ÊÂëµÄÊ××Ö·û
strFileName = rootPath + @"\hzwb.txt";
numCount2 = 0;
srFile = new StreamReader(strFileName, Encoding.ASCII);
while ((strInput = srFile.ReadLine()) != null)
{
chrWord = strInput.ToCharArray();
numIndex = (int)chrWord[0];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
stWord[numIndex].strWord = chrWord[0];
stWord[numIndex].strSpell2 = chrWord[1].ToString();
numCount2++;
}
srFile.Close();
b_LoadData = true;
return true;
}
private static string funFindMulti(int numIndex, char ch1, char ch2)
{
int numPos;
string strWord;
strWord = "|" + ch1 + ch2 + "/";
numPos = stWord[numIndex].strExt.IndexOf(strWord);
if (numPos >= 0)
return stWord[numIndex].strExt.Substring(numPos + strWord.Length, 1);
return "";
}
///
/// Öú¼ÇÂë(Æ´Òô)
///
///
///
///
public static string funChineseSpell(string strChinese, bool IsName)
{
if (string.IsNullOrWhiteSpace(strChinese))
{
return string.Empty;
}
string strSpell, strThis;
int i, numCount, numIndex;
char[] chrWord;
strSpell = "";
chrWord = strChinese.ToCharArray();
numCount = strChinese.Length;
//2010-03-19 ÒÀ´Î´¦Àí¸÷ºº×ֵį´ÒôÂë
for (i = 0; i < numCount; i++)
{
numIndex = (int)chrWord[i];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
//2010-03-19 ÊÇ·ñ¶àÒô×Ö
strThis = "";
if (stWord[numIndex].numFlag > 0 && !IsName)
{
if (i > 0)
{
strThis = funFindMulti(numIndex, chrWord[i - 1], chrWord[i]);
}
if (strThis.Length == 0)
{
if (i < numCount - 1)
strThis = funFindMulti(numIndex, chrWord[i], chrWord[i + 1]);
}
}
//2010-04-02 °´ÐÕÃû½øÐд¦Àí
if (IsName && i == 0 && stWord[numIndex].strName.Length > 0)
strThis = stWord[numIndex].strName;
//2010-03-20 δÕÒ×ÅʱÊDZê×¼Âë
if (strThis.Length == 0)
strThis = stWord[numIndex].strSpell1.ToString();
strSpell = strSpell + strThis;
}
return strSpell;
}
///
/// Öú¼ÇÂë(Îå±Ê)
///
///
///
public string funWbzxSpell(string strChinese)
{
string strSpell = "";
int i, numCount, numIndex;
char[] chrWord;
strSpell = "";
chrWord = strChinese.ToCharArray();
numCount = strChinese.Length;
//2010-03-19 ÒÀ´Î´¦Àí¸÷ºº×ÖµÄÎå±Ê±àÂë
for (i = 0; i < numCount; i++)
{
numIndex = (int)chrWord[i];
if (numIndex <= 0) continue;
if (numIndex >= INTMAX) continue;
strSpell = strSpell + stWord[numIndex].strSpell2.ToString();
}
return strSpell;
}
}
}