2013-06-28 6 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.
Я понимаю, что этот метод просто удаляет 2 символа из left и right,
, но как я могу обойти это, чтобы удалить эти специальные символы?

Кроме того, я видел что-то с vblF, CtrlF что-то вроде этого, но я не мог работать с этим, \

+0

Измените параметр '-2', который вы передаете в функции' Left $ 'и' Right $ ', на другой номер? –

+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 
Смежные вопросы