2013-06-28 29 views
0

我有一個字符串,如X5BC8373XXX。其中X =特殊字符等於方形。
我也有一些特殊字符,如\n但我刪除它們,但我無法刪除廣場... 我想知道如何刪除它。
我發現這個方法:如何刪除特定的特殊字符

Dim Test As String 
Test = Replace(Mscomm1.Input, Chr(160), Chr(64) 'Here I remove some of the special characters like \n 
Test = Left$(Test, Len(Test) -2) 
Test = Right$(Test, Len(Test) -2) 

此方法不會刪除這些特殊字符,但它也消除我的第一個字符5
我意識到這種方法只是從leftright,
刪除2個字符,但我怎麼能解決這個問題,以消除這些特殊字符?

我也看到了vblF, CtrlF像這樣的東西,但我不能這樣工作; \

+0

將您傳遞給'Left $'和'Right $'函數的'-2'參數更改爲另一個數? –

+0

@CodyGray我想過,但是我知道你會知道'CardID'的不同長度嗎?這就是爲什麼我要求換一種方法。 – Ghaleon

+0

然後你需要弄清楚這些「特殊字符」是什麼以及它們來自哪裏。那麼你也可以「替換」它們。他們顯示爲方塊/方塊的原因是因爲您的字體沒有該字符的字形。使用調試器來查看數值是什麼。 –

回答

3

清理非打印字符是很容易的。一種蠻力但容易定製的方法可能是:

Private Function Printable(ByVal Text As String) As String 
    Dim I As Long 
    Dim Char As String 
    Dim Count As Long 

    Printable = Text 'Allocate space, same width as original. 
    For I = 1 To Len(Text) 
     Char = Mid$(Text, I, 1) 
     If Char Like "[ -~]" Then 
      'Char was in the range " " through "~" so keep it. 
      Count = Count + 1 
      Mid$(Printable, Count, 1) = Char 
     End If 
    Next 
    Printable = Left$(Printable, Count) 
End Function 

Private Sub Test() 
    Dim S As String 

    S = vbVerticalTab & "ABC" & vbFormFeed & vbBack 
    Text1.Text = S 'Shows "boxes" or "?" depending on the font. 
    Text2.Text = Printable(S) 
End Sub 
3

您可以使用正則表達式。如果您想刪除所有不是數字或字母的內容,可以使用下面的代碼。如果還有其他角色需要保留,則正則表達式可以高度自定義,但可能會有點混亂。

這也有利於一次完成整個字符串,而不是逐個字符。

您需要在項目中引用Microsoft VBScript Regular Expressions

Function AlphaNum(OldString As String) 
    Dim RE As New RegExp 
    RE.Pattern = "[^A-Za-z0-9]" 
    RE.Global = True 
    AlphaNum = RE.Replace(OldString, "") 
End Function