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