如何使left,right函数忽略中文字符带来的问题,例如Left("问题是left",6)="问题是"
right("问题是left",6)="是left"

解决方案 »

  1.   

    STRCONV() 函数用于双字节字符(全角)与单字节字符(半角)的转换。语法STRCONV(字符表达式, 转换方式)返值类型字符型参数描述字符串:需要转换的字符表达式。转换方式:指定是从单字节转换到双字节,还是从双字节转换到单字节,1为单到又,2为双到单。示例对于使用中文版的软件往往有这么一个问题,就是该输入半角字符的时候输入了全角字符,比如地址中的门牌号,在录入时如果不小心录入了全角,那么查询时用半角就查不到,或者录入时虽然是半角,但在查找时却用全角来查询,同样也查不到,现在有了这个函数就能很容易地解决这个问题了,比如录入的地址数据存在 addr 这个变量中,那么用如下语句来存数据表就可避免录入了全角:replace 地址 with strconv(dz,2)strconv() 函数会将其中的全角数字、字母等转换为半角,而汉字任保持不变,棒吧!查询时,要查询的信息放在 seekcont 变量中,用如下语句,即使查询信息中有全角字符也可以查到:locate for 地址=strconv(seekcont,2)
      

  2.   

    Left("问题是left", 6) = 问题是lef
    Right("问题是left", 6)= 题是left
      

  3.   

    Cooly(烦)的结果是现在VB可以提供的结果,但是这个结果和数据的存储的实际情况是不一样的,英文字母占一个Byte,而中文则占两个byte,我需要按照Byte的left()和right(),就是这样Left("问题是left",6)="问题是"
    right("问题是left",6)="是left"
      

  4.   

    Left(strconv("问题是left",2 ),6)
    right(strconv("问题是left",2),6)试试
      

  5.   

    holydiablo(鱼头)  不行,我已经试过了
      

  6.   

    leftb() 和 rightb()
      

  7.   

    leftB() and rightB()也是不行的leftB()和rightB()会将英文字符也作为2个Byte虽然  LeftB("问题是left",6)="问题是"
    但是  LeftB("问题是left",8)="问题是l"
      

  8.   

    Public Function LeftEx(ByVal str As String, ByVal Lenth As Long) As String
        If str = "" Then
            LeftEx = str
        Else
            LeftEx = StrConv(LeftB$(StrConv(str, vbFromUnicode, 2052), Lenth), vbUnicode, 2052)
        End If
    End Function
      

  9.   

    LeftEx("问题是left",6)
    LeftEx("问题是left",8)
      

  10.   

    但 leftex("问题是left",3)="问" ,这个解决不好.
      

  11.   

    这是我的程序里一段代码,你们看看,我的方法的确解决了这个问题。        ll_lem = 100
            ls_tmp = String(100, Chr(0))
            ll_rtn = GetPrivateProfileString("Database", "Foxpro", " ", ls_tmp, ll_lem, App.Path + "\Config.ini")
            If ll_rtn > 0 Then
                ls_tmp = Trim(Left(ls_tmp, ll_rtn))
                For i = ll_rtn - 1 To 1 Step -1
                    If Mid(ls_tmp, i, 1) <> Chr(0) Then
                        Exit For
                    End If
                Next i
                FPath = Trim(Left(ls_tmp, i))
            Else
                FPath = App.Path
            End If
      

  12.   

    我有2个办法:
    1。如果字符不是很多的话,一个一个判断是不是unicode,是的话就转换成ascii。
    2。用copymemory函数。
      

  13.   

    大家都忽略了vb字符的特殊性(包括我),vb中的string变量其实是指向unicode的指针,用strconv()函数转换后再与字符串比较时一定要转换回来。
    楼主的问题应该可以这样解决:
    StrConv(LeftB(StrConv("问题是left", vbFromUnicode), 6), vbUnicode)
    StrConv(LeftB(StrConv("问题是left", vbFromUnicode), 6), vbUnicode)