FAQ > 金融建模 > 建模及平台使用中遇到的问题 > 语法相关

Q:天软中如何正确判断中文(汉字)字符串?    

  • 说明:天软是GBK编码,一个汉字占两个字节,用常用的普通字符串函数来判定一个汉字,可能会造成误判,这时,我们需要用多字节语言支持函数来实现。
    该类函数的位置:天软帮助文档(F1)中天软金融分析.NET函数大全>字符串函数>多字节语言支持函数
        在多字节语言支持函数中按多字节计算,即一个汉字当一个字符,用lengthw函数计算长度,用Ansipos判断汉字所在位置或是否存在。
        而普通字符串函数则是按字节计算,一个汉字算两个字符,用length函数计算长度,用pos/copy等判断字符串位置或取子串。
    范例:

           s:='TSL天软';
           a:=Pos('软',s);
           b:=copy(s,2,4);
           c:=length(s);
           d:=Ansipos('软',s);
           e:=midstr(s,2,4);
           f:=lengthw(s);
           return array('普通字符串函数':('软字开始位置':a,'第2个位置起数4个':b,'字符串长度':c),
           '多字节语言支持函数':('软字开始位置':d,'第2个位置起数4个':e,'字符串长度':f));
    //返回


    错误应用场景:

           s:='和顺电气';
           return Pos('退',s);
    //返回2

    问题:从这两句代码的结果返回我们看出,这个结果明显是不对的,s字符串中不存在’退’这个汉字,那么,原因是什么呢?如何解决?
    原因:pos函数中,按字节进行判断,s字符串中’和’这个汉字的第二个字符和’顺’的第一个字符组成起来就是’退’,所以判断’退’在s字符串中的第二个字符位置。
    解决办法:将pos改为AnsiPos即可。

           s:='和顺电气';
           return AnsiPos('退',s);
    //返回0