pb中取汉字串首字符的一个函数

原创 2001年07月08日 16:50:00

今天看到xuejun的一个取汉字首字符的函数,试用了一下,感觉很好用,不敢独享,拿出来跟大家分享:

$PBExportHeader$uf_getfirstletter.srf
$PBExportComments$ 返回给定汉字串的首字母串,  xuejun , 19990821
global type uf_getfirstletter from function_object
end type

forward prototypes
global function string uf_getfirstletter (string as_inputstring)
end prototypes

global function string uf_getfirstletter (string as_inputstring);//Function name  :  uf_GetFirstLetter
//Used to              :  返回给定汉字串的首字母串,即声母串
//Input Arguments:  as_InputString - string , 给定的汉字串
//Return Value    :  ls_ReturnString - String , 给定的汉字串的声母串,一律为小写
//Notice                :  1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的
//                                  系统此函数无效!
//                              2. 若汉字串含有非汉字字符,如图形符号或ASCII码,则这些非汉字字符
//                                  将保持不变.
//Sample              :  ls_rtn =  uf_GetFirstLetter("中华人民共和国")
//                              ls_rtn will be : zhrmghg

//Scripts:
char      lc_FirstLetter[23]            //存放国标一级汉字不同读音的起始区位码对应读音
string    ls_ch                                //临时单元
string    ls_SecondSecTable        //存放所有国标二级汉字读音
string    ls_ReturnStr                  //返回串
integer  li_SecPosValue[23]        //存放国标一级汉字不同读音的起始区位码
integer  i , j
integer  li_SectorCode                //汉字区码
integer  li_PositionCode              //汉字位码
integer  li_SecPosCode              //汉字区位码
integer  li_offset                          //二级字库偏移量

//Set initial value
li_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3730,3858,4027,4086,4390,4558,4684,4925,5249 }
lc_FirstLetter[]  = {"A", "B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","W","X","Y","Z"}
ls_SecondSecTable="CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ"

//Get it !
ls_ReturnStr = ""   
For i=1 to Len(as_InputString)                //依次处理as_InputString中每个字符
    ls_ch=Mid(as_InputString , i , 1)     
      If Asc(ls_ch)<128  then                      //  非汉字
          ls_returnStr = ls_returnStr+ls_ch    //  不变
      Else                                                    //  是汉字
          ls_ch = Mid(as_InputString , i , 2)        // 取出此汉字
          li_SectorCode = Asc(Left(ls_ch, 1)) - 160        //区码
          li_PositionCode = Asc(Right(ls_ch, 1)) - 160  //位码
          li_SecPosCode = li_SectorCode*100 +  li_PositionCode            // 区位码
          If li_SecPosCode>1600  and  li_SecPosCode<5590  then        //  第一个字符
              For j=23 to 1 Step -1              // 找声母
                  If li_SecPosCode>=li_SecPosValue[j] then
                        ls_returnStr = ls_returnStr +  lc_FirstLetter[j]
                        Exit
                  End if
              Next
          Else                                              //  第一个字符
              li_offset = (li_SectorCode - 56 ) *94 + li_PositionCode - 1      // 计算偏移量
              If li_offset>=0  and li_offset<=3007      then                            //二区汉字
                  ls_returnStr = ls_returnStr + Mid(ls_SecondSecTable, li_offset , 1)      //取出此字声母
              End if
          End if
          i = i+1                  //    指向下一个汉字
    End if
Next                              // 处理完毕

//Return result
Return    lower( ls_returnStr )                //返回 as_InputString 的声母串

end function

JAVA获取字符串首字拼音和全拼

JAVA获取字符串首字拼音或者全部拼音,用的是pinyin4j。 import java.util.ArrayList; import java.util.Hashtable; import...
  • KokJuis
  • KokJuis
  • 2016年11月03日 15:52
  • 2057

PB判断数据窗口数据是否更改及原始值与当前值

PB判断数据窗口数据是否更改及原始值与当前值    dwcontrol.GetItemStatus ( row, column, Primary! )可以获取该缓冲区内指定单元的状态,当参数colu...
  • nuptsv_ice
  • nuptsv_ice
  • 2014年03月07日 09:19
  • 5979

PB数据窗口对象之字段属性和计算域属性

〓字段和计算域的属性-更多见帮助(DataWindow objectproperties) *获取字段的类型(Coltype属性) 字段的ColType属性是一个非常有用的属性,使用该属性可以...
  • u012369435
  • u012369435
  • 2014年07月04日 13:01
  • 3382

fastjson序列化(对象转字符串)时字段的大小写问题与我自己的使用方案

因为现在公司的后台是.net,而他们的命名方式并不是Java的JavaBean,。这时如果还是按照以前的方式实体的创建使用JavaBean的方式,在序列化的时候就会出现很多不必要的麻烦-———当我们需...
  • z2wenfa
  • z2wenfa
  • 2016年11月27日 22:12
  • 2684

split 分割 字符串(分隔符如:* ^ : | , .) 及注意点

split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
  • qq_35812160
  • qq_35812160
  • 2017年11月22日 15:16
  • 239

[易语言]计次循环首/判断循环首/循环判断首

计次循环首.局部变量 N, 整数型 .计次循环首 (参数1[循环次数],参数2[记录已循环的次数]) 输出调试文本 (“你好” + 到文本 (N)) 延迟 (500) .计次循环尾 (...
  • ZBzibing
  • ZBzibing
  • 2016年08月16日 10:38
  • 2506

shell提取字符串指定的内容

在写shell程序的很多时候我么需要提取字符串中相应的值来做进一步的处理,比如需要写一个关闭某些进程的脚本,此时就需要获取这些进程的ID然后加上kill命令来关闭这些进程,然而当我们使用ps命令去查询...
  • u014046192
  • u014046192
  • 2015年12月27日 23:08
  • 5763

PB9.0和.INI文件

Vb.net和C#开发时我们学习过用配置文件来保存数据库连接的属性,这样可以方便我们更换移植数据库,提高软件的生存能力。那么Pb9.0也有类似的机制来实现,即.ini文件。 什么是.ini文件?   ...
  • zhuojiajin
  • zhuojiajin
  • 2014年02月13日 21:23
  • 4768

SAP ABAP 字符串操作

字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time)  1. 字符串连接 CONCATENAT...
  • hugh_Lee
  • hugh_Lee
  • 2016年11月03日 10:27
  • 702

PB数据窗口对象之字段操作

数据窗口对象的字段操作 ---------- 字段的编辑类型 PB提供了六种编辑类型: 1)Edit是字段的缺省编辑类型,可以用于所有类型的字段上。 2)CheckBox编辑类型在这里是一种...
  • u012369435
  • u012369435
  • 2014年07月04日 11:52
  • 1321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pb中取汉字串首字符的一个函数
举报原因:
原因补充:

(最多只允许输入30个字)