CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

急!!!!!!!!!在线等待

楼主Rogal(俊逸)2002-04-19 08:49:33 在 VB / 基础类 提问

请问各位高手,我需要一个输入控件,具体要求如下:输入汉字拼音的头一个字母就能在边上出现一个对应的汉字的下拉框。如输入hz就能出现     杭州!!!  
  问题点数:100、回复次数:9Top

1 楼gump2000(阿甘)回复于 2002-04-19 08:52:23 得分 10

呵呵,看看这段代码  
  Function   GET_hzPY(strCHI   As   String)  
  'strCHI   为一个汉字  
  Dim   lcretn   As   String  
  cArea   =   Asc(strCHI)  
  cArea   =   cArea   +   65536  
  Select   Case   cArea  
      Case   45217   To   45252  
                  lcretn   =   "A"  
      Case   45253   To   45760  
                  lcretn   =   "B"  
      Case   45761   To   46317  
                  lcretn   =   "C"  
      Case   46318   To   46825  
                  lcretn   =   "D"  
      Case   46826   To   47009  
                  lcretn   =   "E"  
      Case   47010   To   47296  
                  lcretn   =   "F"  
      Case   47297   To   47613  
                  lcretn   =   "G"  
      Case   47614   To   48118  
                  lcretn   =   "H"  
      Case   48119   To   49061  
                  lcretn   =   "J"  
      Case   49062   To   49323  
                  lcretn   =   "K"  
      Case   49324   To   49895  
                  lcretn   =   "L"  
      Case   49896   To   50370  
                  lcretn   =   "M"  
      Case   50371   To   50613  
                  lcretn   =   "N"  
      Case   50614   To   50621  
                  lcretn   =   "O"  
      Case   50622   To   50905  
                  lcretn   =   "P"  
      Case   50906   To   51386  
                  lcretn   =   "Q"  
      Case   51387   To   51445  
                  lcretn   =   "R"  
      Case   51446   To   52217  
                  lcretn   =   "S"  
      Case   52218   To   52697  
                  lcretn   =   "T"  
      Case   52698   To   52979  
                  lcretn   =   "W"  
      Case   52980   To   53688  
                  lcretn   =   "X"  
      Case   53689   To   54480  
                  lcretn   =   "Y"  
      Case   54481   To   55359  
                  lcretn   =   "Z"  
      Case   Else  
                  lcretn   =   "   "  
  End   Select  
  GET_hzPY   =   lcretn  
  End   FunctionTop

2 楼gump2000(阿甘)回复于 2002-04-19 08:52:37 得分 0

Public   Function   GetSpellCode(ByVal   SourceString   As   String)   As   String  
          Dim   SerialSource   As   String  
          Dim   SerialTarget   As   String  
          Dim   TempString   As   String  
          Dim   j   As   Integer  
          Dim   i   As   Integer  
          Dim   HelpChar   As   String  
          Dim   rsSimpleCode   As   Recordset  
   
           
          SerialSource   =   "啊芭擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝座"  
          SerialTarget   =   "abcdefghjklmnopqrstwxyz"  
           
          For   i   =   1   To   Len(SourceString)  
                  HelpChar   =   Mid(SourceString,   i,   1)  
                  If   Asc(HelpChar)   >=   Asc(Left(SerialSource,   1))   And   Asc(HelpChar)   <=   Asc(Right(SerialSource,   1))   Then  
                      If   Asc(HelpChar)   =   Asc(Right(SerialSource,   1))   Then  
                              GetSpellCode   =   UCase(GetSpellCode   &   Right(SerialTarget,   1))  
                      Else  
                              For   j   =   2   To   Len(SerialSource)  
                                      TempString   =   Mid(SerialSource,   j,   1)  
                                      If   Asc(HelpChar)   <   Asc(TempString)   Then  
                                          GetSpellCode   =   UCase(GetSpellCode   &   Mid(SerialTarget,   j   -   1,   1))  
                                          Exit   For  
                                      End   If  
                              Next   j  
                      End   If  
              Else  
                      If   Asc(HelpChar)   >   0   Then                 '非中文字符  
                              GetSpellCode   =   UCase(GetSpellCode   &   HelpChar)  
                      Else  
                          Set   rsSimpleCode   =   New   Recordset  
                          rsSimpleCode.Open   "select   *   from   SimpleCode   where   hz='"   &   HelpChar   &   "'",   ModuleVar.g_Conn,   adOpenStatic,   adLockOptimistic  
                          If   rsSimpleCode.BOF   And   rsSimpleCode.EOF   Then  
                              frmSimpleCode.LetCode   =   HelpChar  
                              frmSimpleCode.Show   vbModal  
                              GetSpellCode   =   UCase(GetSpellCode   &   frmSimpleCode.GetCode)  
                          Else  
                              rsSimpleCode.MoveFirst  
                              GetSpellCode   =   UCase(GetSpellCode   &   rsSimpleCode("jm"))  
                          End   If  
                          'GetSpellCode   =   GetSpellCode   &   "?"  
                      End   If  
              End   If  
      Next   i  
  End   FunctionTop

3 楼gump2000(阿甘)回复于 2002-04-19 08:52:49 得分 0

我们在编写数据库应用软件时,常常需要设计对人名、地名等各种汉字信息进行查找的功能。  
  如果只允许用户输入汉字来查找,会使得查找功能不灵活,不完善;但如果允许用户输入汉  
  字的拼音作为查找条件,除了多设一个储存汉字拼音的字段外,最大的问题在于输入资料时  
  还得额外输入汉字的拼音,大大增加了输入的工作量。能不能通过编程的手段在输入汉字资  
  料时自动产生其对应的拼音,从而解决这个矛盾呢?答案是肯定的,下面介绍的方法就能让  
  您轻松实现这个目的,为简单叙述起见,我们假设只需要产生汉字的声母,而不要韵母(无  
  声母的则取韵母的第一个字母)。    
   
    要自动产生拼音,首先必须有个汉字-拼音对照表。去哪里找这个表?可自己动手做一  
  个。做表的方法有点复杂,要先用工具生成汉字与拼音对应的文本文件,再用编程的手段将  
  需要的内容加在数据表中。下面介绍一种具体的操作方法:    
   
    第一步,利用“Windows   95附件”中“输入法生成器”的逆转化功能,将拼音输入法的  
  码表文件“c:\windows\system\winpy.mb”逆转换为文本文件“c:\winpy.txt”(当然转换  
  后的文件任您取名和指定位置)。用写字板打开此文本文件,可以看到这样的文字:    
   
    [Description]    
   
    Name=全拼    
    MaxCodes=12    
    MaxElement=1    
    UsedCodes=abcdefghijklmnopqrstuvwxyz    
    WildChar=?    
    ……    
    [Text]    
    啊a    
    阿a    
    ……    
    阿爸aba    
    阿昌achang    
    ……    
   
    显然,最前面12行此时对于我们来讲是完全无用的,可用手工将之删除。另外,文件中  
  还有大量词的编码,如“阿爸aba”、“阿昌achang”等,对我们也是无用的,如何将之去  
  掉使得文件中只保留单字及其编码呢?用手工显然太麻烦,只能靠一段小程序了。我们这样  
  考虑,如果某行是单字及其编码,则这行的第三个字符肯定是字母,可以取这行的前三个字  
  符存放在另一个文件中;而如果某行是词,则第三个字符是汉字的一部分,其ASC值在128以  
  上,我们就不用管它。    
   
    下面给出这段小程序:    
   
    newfile=Fcreate(′c:\py.txt′)&&创建文件,用于储存单字及其编码的文本    
    oldfile=Fopen(′c:\winpy.txt′)   &&   打开文件    
    Fseek(oldfile,   0)   &&   移动指针到文件头    
    Do   while   not   feof(oldfile)    
      c=left(Fgets(oldfile),3)    
             if   asc(right(c,1))   <   128   then    
               cc=chr(34)-left(c,2)-chr(34)-″,″-chr(34)-right(c,1)-chr(34)    
                       FPUTS(newfile,   cc)   &&以″字″,″z″   这样的格式写在新文件里    
     endif      
    Enddo    
       Fclose(newfile)   &&   关闭文件    
       Fclose(oldfile)   &&   关闭文件    
    creat   table   py   (汉字   c(2),拼音   c(1))&&创建新表    
    use   py   &&打开此表    
    append   from   c:\py.txt   type   delimited    
       &&从文本中追加数据    
    use    
   
    运行这段程序后,一个存有汉字和拼音首个字母的表PY就产生了。将这个表加入到我  
  们的数据库中,并根据汉字建立索引,就可以使用这个表了。    
   
    接下来要解决的问题是:输入汉字后,如何将之转换为拼音呢?假设在一个表单里已  
  经建立了一个名为“汉字”的文本框用于输入汉字和一个名为“拼音”的文本框用于显示  
  汉字对应的拼音。我们可在“汉字”这个文本框的LostFoucs事件中写入如下代码:    
   
    local   a,b,c    
    c=″   ″    
    b=″   ″    
    a=thisform.汉字.value    
    select   py   &&假设此表在此之前已经打开且已经指定索引    
    for   i=2   to   len(a)   step   2    
       store   right(left((a),i),2)   to   b    
       seek   b    
       store   c-py.拼音   to   c    
    next   i      
    thisform.拼音.value=c    
   
    至此,自动产生拼音的工作可以说成功完成了。至于如何添加在你的资料表上,就不  
  必罗嗦了。这个方法为我们设计数据库应用软件带来了极大的好处,希望对大家有点启发  
  作用。Top

4 楼softrain(曾经的月光,现在的日光)回复于 2002-04-19 09:08:39 得分 0

真的很妙!Top

5 楼gump2000(阿甘)回复于 2002-04-19 09:12:39 得分 0

以上是获得汉字拼音第一个字母的,用反查询了  
  起码您输入hz的时候该知道有多少中文字在待查之中  
  呵呵Top

6 楼Rogal(俊逸)回复于 2002-04-19 10:31:16 得分 0

gump2000,谢谢指导,不过我是初学,还是有些不明白,你的程序里是不是有些函数不是VB里的?我试过了,不能运行!  
   newfile=Fcreate(′c:\py.txt′)&&创建文件,用于储存单字及其编码的文本    
    oldfile=Fopen(′c:\winpy.txt′)   &&   打开文件    
    Fseek(oldfile,   0)   &&   移动指针到文件头    
    Do   while   not   feof(oldfile)    
      c=left(Fgets(oldfile),3)    
             if   asc(right(c,1))   <   128   then    
               cc=chr(34)-left(c,2)-chr(34)-″,″-chr(34)-right(c,1)-chr(34)    
                       FPUTS(newfile,   cc)   &&以″字″,″z″   这样的格式写在新文件里    
     endif      
    Enddo    
       Fclose(newfile)   &&   关闭文件    
       Fclose(oldfile)   &&   关闭文件    
    creat   table   py   (汉字   c(2),拼音   c(1))&&创建新表    
    use   py   &&打开此表    
    append   from   c:\py.txt   type   delimited    
       &&从文本中追加数据    
    use    
  Top

7 楼cornerxu(面)回复于 2002-04-19 10:35:06 得分 0

UP  
  学了一招Top

8 楼gump2000(阿甘)回复于 2002-04-19 10:35:40 得分 0

这段代码是有问题的:)  
  呵呵  
   
  假如您需要的话,我可以把处理过的发给您  
  Top

9 楼gump2000(阿甘)回复于 2002-04-19 10:44:05 得分 90

或者您用这程序  
  Private   Sub   Command1_Click()  
          Dim   buf   As   String  
          Dim   ob()   As   Byte  
           
          Open   "i:\winpy.txt"   For   Input   As   #1  
          Open   "i:\ppp.txt"   For   Append   As   #2  
           
          Do   Until   EOF(1)  
                  Line   Input   #1,   buf  
                  ob   =   StrConv(buf,   vbFromUnicode)  
                  If   ob(2)   <   128   Then  
                          Print   #2,   buf  
                  End   If  
          Loop  
          Close   #1  
          Close   #2  
          MsgBox   "ok"  
  End   Sub  
   
   
  把winpy前面的一段注释删除掉再执行  
   
  Top

相关问题

  • 急!在线等待
  • 急!!!!!!!!!!!!!!!(在线等待)
  • 在线等待,急!!!
  • 急!!!!!!!(在线等待)
  • 急!在线等待!
  • 急!!(在线等待)
  • 急:在线等待!
  • 在线等待——急
  • 急!!!在线等待!!!
  • 急!在线等待!

关键词

  • 汉字
  • 文件
  • 编码
  • 字符
  • 字母
  • lcretn
  • getspellcode
  • rssimplecode
  • 拼音
  • oldfile

得分解答快速导航

  • 帖主:Rogal
  • gump2000
  • gump2000

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo