我需要以编程方式删除不可打印的字符,例如:
tabs - char(9)换行符- char(10)回车符- char(13)数据链路转义- char(16)
我启动了一个通用函数,它将从ms access表单域的lost_focus事件中调用。
当字符串包含不需要的字符时,我还不知道如何识别。
Function RemoveNonPrintableCharacters(ByVal TextData) As String
Dim dirtyString As String
Dim cleanString As String
Dim iPosition As Integer
If IsNull(TextData) Then
Exit Function
End If
dirtyString = TextData
cleanString = ""
For iPosition = 1 To Len(dirtyString)
Select Case Asc(Mid(dirtyString, iPosition, 1))
Case 9 ' Char(9)
Case 10 ' Char(10)
Case 13 ' Char(13)
Case 16 ' Char(16)
Case Else ' Add character to clean field.
cleanString = cleanString & Mid(dirtyString, iPosition, 1)
End Select
Next
RemoveNonPrintableCharacters = cleanString
End Function
这是我在测试时使用的两个字符串:
This line, has multiple, tabs that need to be removed
This line, has multiple,
line
breaks
that
need to be removed
This line, has multiple, tabs that need to be removed
And
Also contains
multiple,
line
breaks
that
need to be removed
发布于 2020-02-05 01:06:41
当我搜索一个快速功能时,这是最好的谷歌结果,我有一个很好的旧谷歌,但没有什么能完全解决我的问题的真正出现的。
主要的问题是,即使没有问题,所有这些函数都会接触到原始字符串。这会让事情变慢。
我已经重写了它,以便只纠正不好的字符,也扩展到所有不可打印的字符和标准ascii之外的字符。
Public Function Clean_NonPrintableCharacters(Str As String) As String
'Removes non-printable characters from a string
Dim cleanString As String
Dim i As Integer
cleanString = Str
For i = Len(cleanString) To 1 Step -1
'Debug.Print Asc(Mid(Str, i, 1))
Select Case Asc(Mid(Str, i, 1))
Case 1 To 31, Is >= 127
'Bad stuff
'https://www.ionos.com/digitalguide/server/know-how/ascii-codes-overview-of-all-characters-on-the-ascii-table/
cleanString = Left(cleanString, i - 1) & Mid(cleanString, i + 1)
Case Else
'Keep
End Select
Next i
Clean_NonPrintableCharacters = cleanString
End Function
发布于 2017-01-27 08:19:06
A = Chr(09) & "Cat" & Chr(10) & vbcrlf
A = Replace(A, Chr(10))
A = Replace(A, Chr(13))
A = Replace(A, Chr(09))
Msgbox A
这是一个人通常做的事情。
你的代码创建了很多隐式变量。
发布于 2019-11-12 00:49:07
使用Excel Clean函数,这似乎应该简单得多。以下方法也适用:
myString = Worksheets("Sheet1").Range("A" & tRow).Value
myString = Application.WorksheetFunction.Clean(myString)
您还可以使用其他常规和自行开发的Excel函数:
myString = Application.WorksheetFunction.Trim(myString)
还没有让替换函数以这种方式工作,但我正在努力。
https://stackoverflow.com/questions/41882525
复制相似问题