VisualBasic32-bit版本的字串處理采用Unicode,也就是說字串在VB內(nèi)部是以Unicode的格式來存放。何謂Unicode?簡單的說,就是每一個字符都是以2-byte的形式表示,而每個「實體字符」就是一個「字符」。因此,
Len("大家好")
Len("abc")
所返回的值都是3,因為「大」和「a」都是一個字符。
但是這對一些中文字串處理,例如純文字的數(shù)據(jù)文件,卻是一個大災(zāi)難,因為你必須以byte來定位每個字符,可是Unicode卻把一切的處理全搞砸了。例如:
Len("GoodMorning")返回12,而
Len("今天天氣很好")返回6
對初學(xué)者而言,好不容易能使用VB來寫程序已經(jīng)是件了不起的事了,卻馬上在中文處理上挨了一記悶棍,所受到的打擊實在不小。但是不要怕,事實上只要再多了解一些指令,就可以把中文處理的問題解決了。
是什么指令呢?最重要的莫過于StrConv了。StrConv函數(shù)的語法為:StrConv(待轉(zhuǎn)換字串,轉(zhuǎn)換格式)
其中轉(zhuǎn)換格式在這里用到的是:
vbUnicode將Ansi字串轉(zhuǎn)換為Unicode
vbFromUnicode將Unicode字串轉(zhuǎn)換為Ansi
將字串轉(zhuǎn)成Ansi之后,所有的字串處理指令都要加個B,例如:LeftB,RightB,
MidB,ChrB,InstrB,LenB,InputB等。例用這些指令來處理就行了。
當(dāng)你處理完畢之后,你可以再將它再轉(zhuǎn)回Unicode,這樣就可以使用一般的字串處理指令了。這樣講看得懂嗎?如果還是不了解,看看下面的實例說明:
簡易使用范例
看看下面的基本范例您應(yīng)該就會對VB的字串處理方式有些概念。
PrivateSubCommand1_Click()
DimsUnicodeAsString
DimsAnsiAsString
'Unicode運(yùn)算
sUnicode="王小明,A123456789,651023,上海市中山路100號,(02)2345678"
Debug.PrintLen(sUnicode)'返回44
Debug.PrintMid$(sUnicode,5,10)'返回A123456789
Debug.PrintInstr(sUnicode,"上海市")'返回23
'將Unicode字串轉(zhuǎn)成Ansi
sAnsi=StrConv(sUnicode,vbFromUnicode)
'Ansi運(yùn)算
Debug.PrintLenB(sAnsi)'返回54
Debug.PrintMidB$(sAnsi,8,10)'返回?????,因為忘了轉(zhuǎn)回Unicode
Debug.PrintStrConv(MidB$(sAnsi,8,10),vbUnicode)'返回A123456789,請注意轉(zhuǎn)回Unicode的動作一定要做
Debug.PrintInStrB(sAnsi,StrConv("上海市",vbFromUnicode))'返回23,不要忘了要把"上海市"也轉(zhuǎn)成Ansi,否則會找不到
EndSub
讀入文本文件
在VB的小技巧中,有一個是快速讀文件法:
PrivateSubCommand1_Click()
DimsFileAsString
Open"C:\filename.txt"ForInputAs#1
sFile=Input$(LOF(1),#1)
Close#1
EndSub
Len("大家好")
Len("abc")
所返回的值都是3,因為「大」和「a」都是一個字符。
但是這對一些中文字串處理,例如純文字的數(shù)據(jù)文件,卻是一個大災(zāi)難,因為你必須以byte來定位每個字符,可是Unicode卻把一切的處理全搞砸了。例如:
Len("GoodMorning")返回12,而
Len("今天天氣很好")返回6
對初學(xué)者而言,好不容易能使用VB來寫程序已經(jīng)是件了不起的事了,卻馬上在中文處理上挨了一記悶棍,所受到的打擊實在不小。但是不要怕,事實上只要再多了解一些指令,就可以把中文處理的問題解決了。
是什么指令呢?最重要的莫過于StrConv了。StrConv函數(shù)的語法為:StrConv(待轉(zhuǎn)換字串,轉(zhuǎn)換格式)
其中轉(zhuǎn)換格式在這里用到的是:
vbUnicode將Ansi字串轉(zhuǎn)換為Unicode
vbFromUnicode將Unicode字串轉(zhuǎn)換為Ansi
將字串轉(zhuǎn)成Ansi之后,所有的字串處理指令都要加個B,例如:LeftB,RightB,
MidB,ChrB,InstrB,LenB,InputB等。例用這些指令來處理就行了。
當(dāng)你處理完畢之后,你可以再將它再轉(zhuǎn)回Unicode,這樣就可以使用一般的字串處理指令了。這樣講看得懂嗎?如果還是不了解,看看下面的實例說明:
簡易使用范例
看看下面的基本范例您應(yīng)該就會對VB的字串處理方式有些概念。
PrivateSubCommand1_Click()
DimsUnicodeAsString
DimsAnsiAsString
'Unicode運(yùn)算
sUnicode="王小明,A123456789,651023,上海市中山路100號,(02)2345678"
Debug.PrintLen(sUnicode)'返回44
Debug.PrintMid$(sUnicode,5,10)'返回A123456789
Debug.PrintInstr(sUnicode,"上海市")'返回23
'將Unicode字串轉(zhuǎn)成Ansi
sAnsi=StrConv(sUnicode,vbFromUnicode)
'Ansi運(yùn)算
Debug.PrintLenB(sAnsi)'返回54
Debug.PrintMidB$(sAnsi,8,10)'返回?????,因為忘了轉(zhuǎn)回Unicode
Debug.PrintStrConv(MidB$(sAnsi,8,10),vbUnicode)'返回A123456789,請注意轉(zhuǎn)回Unicode的動作一定要做
Debug.PrintInStrB(sAnsi,StrConv("上海市",vbFromUnicode))'返回23,不要忘了要把"上海市"也轉(zhuǎn)成Ansi,否則會找不到
EndSub
讀入文本文件
在VB的小技巧中,有一個是快速讀文件法:
PrivateSubCommand1_Click()
DimsFileAsString
Open"C:\filename.txt"ForInputAs#1
sFile=Input$(LOF(1),#1)
Close#1
EndSub