制作一个过滤函数,定义若干“段”。如果字符代码属于这个“段”就保留,否则就过滤掉。Function StringClearCode(pStr As String) As string
'过滤字符函数
Dim tOutStr As String
Dim tStrLong As Long
Dim tLoop As Long
Dim tStartByte As Integer
tStrLong=Len(pStr)
If tStrLong Then
For tLoop=1 To tStrLong
tStartByte=Asc(Mid(pStr,tLoop,1))
If AsciiCodeIsStr(tStartByte) Then
tOutStr=tOutStr & Chr(tStartByte)
End If
Next
End If
StringClearCode=tOutStr
End Function关键在于AsciiCodeIsStr的编写。
AsciiCodeIsStr是一个判断代码是否是你所允许的一个函数。它根据已知的代码范围来判断。
Type tpCodeSeg '代码段类。
CodeOn As Integer '代码段开始
CodeEnd As Integer '代码段结束
End TypeDim sysCodeSegs() As tpCodeSeg '全局的代码段表Function CodeSegsSet() '初始化代码段表
'英文和键盘字符代码段32-126
sysCodeSegs(0).CodeOn=32:sysCodeSegs(0).CodeEnd=126
'剩下的由你自己定义。
'sysCodeSegs(N).CodeOn=??:sysCodeSegs(N).CodeEnd=??
End FunctionFunction AsciiCodeIsStr(pCode As Integer) As Boolean
Dim tOutBool As Boolean
Dim tLoop As Integer
tLoop=0 To UBound(sysCodeSegs) '历遍所有代码段表。
tOutBool=tOutBool Or (pCode>=sysCodeSegs.CodeOn And pCode<=sysCodeSegs.CodeEnd) '以Or运算判断是否代码在表的一个段内。
Next
AsciiCodeIsStr=tOutBool
End Function
'过滤字符函数
Dim tOutStr As String
Dim tStrLong As Long
Dim tLoop As Long
Dim tStartByte As Integer
tStrLong=Len(pStr)
If tStrLong Then
For tLoop=1 To tStrLong
tStartByte=Asc(Mid(pStr,tLoop,1))
If AsciiCodeIsStr(tStartByte) Then
tOutStr=tOutStr & Chr(tStartByte)
End If
Next
End If
StringClearCode=tOutStr
End Function关键在于AsciiCodeIsStr的编写。
AsciiCodeIsStr是一个判断代码是否是你所允许的一个函数。它根据已知的代码范围来判断。
Type tpCodeSeg '代码段类。
CodeOn As Integer '代码段开始
CodeEnd As Integer '代码段结束
End TypeDim sysCodeSegs() As tpCodeSeg '全局的代码段表Function CodeSegsSet() '初始化代码段表
'英文和键盘字符代码段32-126
sysCodeSegs(0).CodeOn=32:sysCodeSegs(0).CodeEnd=126
'剩下的由你自己定义。
'sysCodeSegs(N).CodeOn=??:sysCodeSegs(N).CodeEnd=??
End FunctionFunction AsciiCodeIsStr(pCode As Integer) As Boolean
Dim tOutBool As Boolean
Dim tLoop As Integer
tLoop=0 To UBound(sysCodeSegs) '历遍所有代码段表。
tOutBool=tOutBool Or (pCode>=sysCodeSegs.CodeOn And pCode<=sysCodeSegs.CodeEnd) '以Or运算判断是否代码在表的一个段内。
Next
AsciiCodeIsStr=tOutBool
End Function
你似乎说&h2000 - &h7E00和&hA100-&hFE00这两个段。那么只要这样写就可以了。在Load事件里给段表添加两个新段:
sysCodeSegs(1).CodeOn=&H2000:sysCodeSegs(1).CodeEnd=&H7E00
sysCodeSegs(2).CodeOn=&HA100:sysCodeSegs(2).CodeEnd=&HFE00 如果你的这两个段没找错的话,应该可以的。 另外上面的程序只是个草稿,仅仅说明这个原理。我没实际测试过,所以难保有错误。实际编写还是要你自己去研究了。
能留个QQ吗,方便日后联系