using System; using System.Collections ; using System.Text; using System.Text.RegularExpressions; using System.Data ; using System.Data.OleDb ; namespace Yds { namespace Nextool { namespace EMS { /// <summary> /// 功能: 从指定的路经EXCEL文件中读取数据 ,EMS代码查询(有两个类型1为标准件2为非标件) /// 外部名称 内部命名 /// 编码 Id /// 名称 Name /// 规格 Rule /// 代号 Code /// 材料 Material /// 备注 Remark /// /// 是否为标准件 StandardYN /// 类型名称 Style /// 必须输入 StandardYN,Style,可选输入Name,Rule,Code,Material,Remark /// 输出 Id,此记录对象 /// /// </summary> public class EMS { Hashtable myEMS = new Hashtable(13); /// <summary> /// 构造函数 /// </summary> /// <param name="Path">EMS文件路经</param> /// public EMS() {} public void AddCode(string Path,bool Standardyn) { if(Standardyn) { this.AddEMSCodeY(Path,"加热板(08)"); this.AddEMSCodeY(Path,"包装箱(09)"); this.AddEMSCodeY(Path,"公用件(10)"); this.AddEMSCodeY(Path,"模头类(11)"); this.AddEMSCodeY(Path,"定型(12)"); this.AddEMSCodeY(Path,"水箱(13)"); this.AddEMSCodeY(Path,"螺钉(14)"); this.AddEMSCodeY(Path,"其他(99)"); } else { this.AddEMSCodeN(Path,"模头零件编码(0001-0199)"); this.AddEMSCodeN(Path,"定型零件编码(0200-0499)"); this.AddEMSCodeN(Path,"水箱零件编码(0500-0599)"); this.AddEMSCodeN(Path,"后共挤零件编码(0600-0649)"); this.AddEMSCodeN(Path,"包装箱零件编码(0650-0699)"); this.AddEMSCodeN(Path,"接口件(0700-0849)"); this.AddEMSCodeN(Path,"其他零件编码(0850-0999)"); } } private void AddEMSCodeY(string Path,string SheetName) { //从指定的路经EXCEL文件中读取数据 DataSet ds; System.Data.OleDb.OleDbConnection conn; System.Data.OleDb.OleDbDataAdapter cmd; System.Data.DataTable table; table=new DataTable(); conn=new System.Data.OleDb.OleDbConnection( @"provider=Microsoft.Jet.OLEDB.4.0;data source=" + Path + ";Extended Properties=Excel 8.0;"); ds=new DataSet(); conn.Open(); cmd=new System.Data.OleDb.OleDbDataAdapter( "select * from ["+SheetName+"$]", conn); cmd.Fill(table); foreach (System.Data.DataRow row in table.Rows) { if(row["编码"].ToString().Trim()=="") continue; Yds.Nextool.EMS.EMSId emsobject=new EMSId(row["编码"].ToString(),SheetName,row["零件名称"].ToString(),row["规格"].ToString(),row["代号"].ToString(),row["材料"].ToString(),row["备注"].ToString()); myEMS.Add (emsobject.id ,emsobject); } conn.Close(); } private void AddEMSCodeN(string Path,string SheetName) { //从指定的路经EXCEL文件中读取数据 DataSet ds; System.Data.OleDb.OleDbConnection conn; System.Data.OleDb.OleDbDataAdapter cmd; System.Data.DataTable table; table=new DataTable(); conn=new System.Data.OleDb.OleDbConnection( @"provider=Microsoft.Jet.OLEDB.4.0;data source=" + Path + ";Extended Properties=Excel 8.0;"); ds=new DataSet(); conn.Open(); cmd=new System.Data.OleDb.OleDbDataAdapter( "select * from ["+SheetName+"$]", conn); cmd.Fill(table); foreach(System.Data.DataRow row in table.Rows ) { if(row["编码"].ToString().Trim()=="") continue; Yds.Nextool.EMS.EMSId emsobject=new EMSId(row["编码"].ToString(),SheetName,row["名称"].ToString(),row["备注"].ToString()); myEMS.Add(emsobject.id ,emsobject); } conn.Close(); } /// <summary> /// 从所有的对象中搜索字符串 /// </summary> /// <param name="matchstr">要匹配的字符串</param> /// <returns></returns> public ArrayList GetEMSCode(string matchstr) { ArrayList list=new ArrayList(); string temStr=""; Nextool.EMS.EMSId emsObject; IDictionaryEnumerator myEnumerator = myEMS.GetEnumerator(); while ( myEnumerator.MoveNext() ) { emsObject=(Nextool.EMS.EMSId)myEnumerator.Value ; if(emsObject.StandardYN) { temStr=emsObject.Name ; if( !this.addList(list,temStr,matchstr,emsObject)) { temStr=emsObject.Rule ; if(!this.addList(list,temStr,matchstr,emsObject)) { temStr=emsObject.Material; if(!this.addList(list,temStr,matchstr,emsObject)) { temStr=emsObject.Remark; if(!this.addList(list,temStr,matchstr,emsObject)) { temStr=emsObject.Code; this.addList(list,temStr,matchstr,emsObject); } } } } } else { temStr=emsObject.Name ; if(!this.addList(list,temStr,matchstr,emsObject)) { temStr=emsObject.Remark; this.addList(list,temStr,matchstr,emsObject); } } } return list; } private bool addList(ArrayList listp,string temstrP,string matchstr,Nextool.EMS.EMSId emsObject) { string temStr=temstrP ; temStr=Yds.ChineseSpell.GetAllFirstPinyin(temStr); temStr=temStr.ToUpper().Replace('×','X'); matchstr=matchstr.ToUpper(); matchstr=Yds.ChineseSpell.GetAllFirstPinyin(matchstr); Regex r = new Regex(matchstr); Match m = r.Match(temStr); if(m.Success) listp.Add(emsObject); return m.Success ; } /// <summary> ///取EMS码 /// </summary> public ArrayList GetEMSCode(bool standardyn,string stylename,string matchstr,int n) { ArrayList list=new ArrayList() ; string temStr=""; Nextool.EMS.EMSId emsObject; IDictionaryEnumerator myEnumerator = myEMS.GetEnumerator(); while ( myEnumerator.MoveNext() ) { emsObject=(Nextool.EMS.EMSId)myEnumerator.Value ; if((emsObject.StandardYN ==standardyn) && (emsObject.Style ==stylename)) { if(standardyn) { switch (n) { case 1: temStr=emsObject.Name ; break; case 2: temStr=emsObject.Rule ; break; case 3: temStr=emsObject.Code ; break; case 4: temStr=emsObject.Material ; break; case 5: temStr=emsObject.Remark ; break; } } else { switch(n) { case 1: temStr=emsObject.Name ; break; case 2: temStr=emsObject.Remark ; break; } } // Create a new Regex object. temStr=Yds.ChineseSpell.GetAllFirstPinyin(temStr); temStr=temStr.ToUpper().Replace('×','X'); matchstr=matchstr.ToUpper(); matchstr=Yds.ChineseSpell.GetAllFirstPinyin(matchstr); Regex r = new Regex(matchstr); // Find a single match in the string. Match m = r.Match(temStr); if(m.Success) list.Add(emsObject); } } return list; } public string ReadMe { get { string temstr=@"Autor:杨冬生 Last modifed:10/04/09 Address:安徽铜陵耐科 Name:EMS NameSpace:Yds.Nextool.EMS Usered:可对EMS文件进行字典操作"; return temstr; } } } public class EMSId { public readonly string id;//EMS号 public readonly bool StandardYN;//是否是标准件 public readonly string Style;//类别 public readonly string Name;//名称 public readonly string Rule=" ";//规则 public readonly string Code=" ";//代号 public readonly string Material=" ";//材料 public readonly string Remark;//备注 public EMSId(string id ,string stylename,string name,string rule,string code,string material,string remark) { this.id =id; this.StandardYN=true; this.Style =stylename; this.Name =name; this.Rule =rule; this.Code =code; this.Material =material; this.Remark =remark; } public EMSId(string id,string stylename,string name,string remark) { this.id =id; this.StandardYN =false; this.Style =stylename; this.Name =name; this.Remark =remark; } public override string ToString() { return this.id +" "+this.Name +" "+this.Rule+" "+this.Code +" "+this.Material +" "+this.Remark ; } public override int GetHashCode() { return this.id.GetHashCode(); } public override bool Equals(object obj) { EMSId temobj=obj as Yds.Nextool.EMS.EMSId ; if(temobj==null) return false; if(temobj.id ==this.id ) return true; return false; } } } } }