Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 通过VBScript从文本中删除尾部不可见字符_Ms Access_Utf 8_Vbscript - Fatal编程技术网

Ms access 通过VBScript从文本中删除尾部不可见字符

Ms access 通过VBScript从文本中删除尾部不可见字符,ms-access,utf-8,vbscript,Ms Access,Utf 8,Vbscript,我正在抓取一些web数据并将其插入Access 2007。 使用.vbs脚本获取和插入数据。 一切都很好,直到最近升级了报废计划 每个文本记录的末尾都有一个额外的空格。 似乎与编码有关 修剪-此功能不起作用。 尝试替换A(扬抑)和xA0,没有结果 现在做左(mystring,len(mystring)-1) 既然我要抓取数百万条记录,那么解决这个问题最简单、最正确的方法是什么 此外,由于Access中的现有数据现在将包含此类“受污染”的数据,如何纠正这种情况?使用更新语句?如何检查最后一个字符是

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

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

修剪-此功能不起作用。
尝试替换A(扬抑)和xA0,没有结果

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

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

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

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

不管怎样,了解最后一个字符实际上是什么都是有用的

选择Asc(右(您的_字符串,1))作为ascii_值
从你的桌子上;
一旦你知道这个角色是什么,你就可以决定如何最好地摆脱它

我不知道对你来说最好的方法是什么。从评论中出现的细节来看,麻烦的字符似乎是一个不间断的空格,ASCII 160。当该字符出现在字符串末尾时,您希望放弃该字符。在这种情况下,您可能还希望丢弃非中断空格之前的任何常规空格字符。但是,如果字符串中的其他位置存在非中断空格,则希望保留这些空格

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

更新您的表
设置您的\u字符串=左(您的\u字符串,Len(您的\u字符串)-1)
其中Asc(右(你的_字符串,1))=160;
如果还想丢弃尾随非中断空格前面的任何空格,请合并
Trim()

更新您的表
设置您的_字符串=修剪(左(您的_字符串,Len(您的_字符串)-1))
其中Asc(右(你的_字符串,1))=160;

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

更新[MyTable]集[MyField]=myRTrim([MyField])


对于新的刮片,可以将相同的函数添加到VBScript代码中。或者,您可以将您的VBScript代码带到Access中,对其进行VBA调整(如果需要),然后在那里使用它。

谢谢您的提示。它是160,一个不间断的空间。消除此问题的最佳方法是什么?我正在一条记录一条记录地插入数百万行,因此可以进行单个字符检查,但可能效率不高。其次,如何修复现有表以检查所有记录、每个字段和更新。在VBS中替换(yourtext,chr(160),“”),在SQL中执行类似命令。@arvo,还需要确保只影响最后一个字符。在文字的中间不可能有真正的字符(160),我不知道你的要求;在我的网络相关代码中,我只是盲目地用普通空格替换nbsp,到目前为止没有问题。顺便说一句,修剪时,您可能需要删除尾随标签,cr,lf和他们的组合之一;它使真正的修剪操作变得非常糟糕。您可以使用正则表达式。请看这里:如果最后一个字符是空格,那么TRIM()会将其删除,因此人们会认为它可能是一个非打印字符,如CTRL+something或ALT+something。
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