3

我正在抓取一些 Web 数据并插入 Access 2007。使用 .vbs 脚本来获取和插入数据。一切都很好,直到最近升级了报废程序。

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

修剪 - 功能不适用于此。
尝试替换 A (Circumflex) 和 xA0 ,没有结果。

正在做 - Left(mystring,len(mystring)-1) 现在。

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

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

4

2 回答 2

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;
于 2013-04-01T05:50:33.300 回答
2

以下 Access VBA 模块代码将为您提供一个名为的函数myRTrim(),您可以在 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 调整它(如果需要),然后在那里使用它。

于 2013-04-01T11:17:37.210 回答