通过VBScript从文本中删除尾随的不可见字符

时间:2013-04-01 05:22:36

标签: ms-access utf-8 vbscript

我正在抓取一些网络数据并插入Access 2007。 使用.vbs脚本获取和插入数据。 事情很顺利,直到最近升级了报废计划。

每个文本记录中都有一个额外的空间。 似乎与编码有关。

修剪 - 功能对此无效。
尝试替换A(Circumflex)和xA0,没有结果。

现在做 - 左(mystring,len(mystring)-1)。

由于我将抓取数百万条记录,解决这个问题的最简单和正确的方法是什么?

此外,如何解决这个问题,因为Access中的现有数据现在将包含此类“受污染”的数据?使用UPDATE语句?如何检查最后一个字符是否为空格?

2 个答案:

答案 0 :(得分:4)

Trim()将删除尾随空格。因此,如果您的字符串值以类似于空格的内容结尾,但未被Trim()删除,则它实际上可能不是空格字符。另一种可能性是一个空格,后面是一个看不见的角色。

无论哪种方式,了解最后一个角色究竟是什么都是有用的。

SELECT Asc(Right(your_string, 1)) AS ascii_value
FROM YourTable;

一旦你知道这个角色是什么,你就可以决定如何最好地摆脱它。

我不知道最好的方式对你来说是什么。从注释中出现的细节来看,麻烦的字符似乎是一个不间断的空格,ASCII 160.你想在字符串末尾出现该字符时丢弃该字符。也许您还想丢弃在该情况下在非破坏空间之前的任何常规空格字符。但是如果字符串中的其他位置存在不间断的空格,则需要保留它们。

此外,您似乎希望对存储在Access表中的现有数据以及使用VBScript抓取过程收集的新传入数据执行此操作。从VBScript,查询不能使用自定义VBA函数或Replace()函数。所以我不知道在没有看到你的抓取代码的情况下对新数据说些什么。对于现有数据,您可以使用UPDATE语句,类似于您在问题中建议的语句,该语句应该可以在VBScript中或在Access会话中使用。

UPDATE YourTable
SET your_string = Left(your_string, Len(your_string) -1)
WHERE Asc(Right(your_string, 1)) = 160;

如果您还想丢弃尾随不间断空格前面的任何空格,请合并Trim()

UPDATE YourTable
SET your_string = Trim(Left(your_string, Len(your_string) -1))
WHERE Asc(Right(your_string, 1)) = 160;

答案 1 :(得分:2)

以下Access VBA模块代码将为您提供一个名为myRTrim()的函数,您可以在UPDATE查询中使用该函数来修复现有记录,例如

UPDATE [MyTable] SET [MyField] = myRTrim([MyField])

Option Compare Database
Option Explicit

Public Function myRTrim(source As Variant) As Variant
    Dim newLength As Long
    If IsNull(source) Then
        myRTrim = Null
    Else
        newLength = Len(source)
        Do While newLength > 0
            If Not IsCharToTrim(Mid(source, newLength, 1)) Then
                Exit Do
            End If
            newLength = newLength - 1
        Loop
        myRTrim = Left(source, newLength)
    End If
End Function

Private Function IsCharToTrim(testChar As String) As Boolean
    Select Case testChar
        '' characters to trim - add to this list if required
        Case " ", Chr(255), Chr(9), Chr(160)
            IsCharToTrim = True
        Case Else
            IsCharToTrim = False
    End Select
End Function

对于新的擦除,您可以为VBScript代码添加相同的功能。或者,您可以将VBScript代码带入Access,将其调整为VBA(如果需要),并在那里使用它。