首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VBA:如何从数据中删除不可打印的字符

VBA:如何从数据中删除不可打印的字符
EN

Stack Overflow用户
提问于 2017-01-27 04:36:08
回答 10查看 14.8K关注 0票数 2

我需要以编程方式删除不可打印的字符,例如:

tabs - char(9)换行符- char(10)回车符- char(13)数据链路转义- char(16)

我启动了一个通用函数,它将从ms access表单域的lost_focus事件中调用。

当字符串包含不需要的字符时,我还不知道如何识别。

代码语言:javascript
复制
    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

这是我在测试时使用的两个字符串:

代码语言:javascript
复制
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
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2020-02-05 01:06:41

当我搜索一个快速功能时,这是最好的谷歌结果,我有一个很好的旧谷歌,但没有什么能完全解决我的问题的真正出现的。

主要的问题是,即使没有问题,所有这些函数都会接触到原始字符串。这会让事情变慢。

我已经重写了它,以便只纠正不好的字符,也扩展到所有不可打印的字符和标准ascii之外的字符。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-01-27 08:19:06

代码语言:javascript
复制
A = Chr(09) & "Cat" & Chr(10) & vbcrlf

A = Replace(A, Chr(10))
A = Replace(A, Chr(13))
A = Replace(A, Chr(09))

Msgbox A

这是一个人通常做的事情。

你的代码创建了很多隐式变量。

票数 2
EN

Stack Overflow用户

发布于 2019-11-12 00:49:07

使用Excel Clean函数,这似乎应该简单得多。以下方法也适用:

代码语言:javascript
复制
myString = Worksheets("Sheet1").Range("A" & tRow).Value 
myString = Application.WorksheetFunction.Clean(myString)

您还可以使用其他常规和自行开发的Excel函数:

代码语言:javascript
复制
myString = Application.WorksheetFunction.Trim(myString)

还没有让替换函数以这种方式工作,但我正在努力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41882525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档