在Access VBA中清除txt时出现问题

在Access VBA中清除txt时出现问题,vba,ms-access,Vba,Ms Access,通常我们会收到以固定字符长度分隔的.txt文件,但这次我不得不处理一个用于打印的.txt文件。此文件需要在MS Access中解析为字段,以便我们可以针对其他表运行它。通常情况下,快速LTRIM()后跟固定字符长度可以正常工作,但此文本文件中似乎存在“重影”字符,这些字符会丢弃一些行而不是其他行。我还尝试了一个if isnumeric()来验证第一行,但这也会产生意外的结果 我已尝试将该文件转换为UTF-8,以消除这些隐藏字符和isnumeric()缺陷,这些缺陷没有被LTRIM()捕获,但没有

通常我们会收到以固定字符长度分隔的.txt文件,但这次我不得不处理一个用于打印的.txt文件。此文件需要在MS Access中解析为字段,以便我们可以针对其他表运行它。通常情况下,快速
LTRIM()
后跟固定字符长度可以正常工作,但此文本文件中似乎存在“重影”字符,这些字符会丢弃一些行而不是其他行。我还尝试了一个
if isnumeric()
来验证第一行,但这也会产生意外的结果

我已尝试将该文件转换为UTF-8,以消除这些隐藏字符和
isnumeric()
缺陷,这些缺陷没有被
LTRIM()
捕获,但没有起作用。我在一个编码工具(记事本++)中打开了这个文件来查看隐藏的字符,但是什么也没有出现。是否有其他方法来清理数据文件,使字符显示与我通过记事本看到的完全一致

引用一个解决方案,在
LTRIM()
的同时插入一个
Clean()
函数,解决了这个问题。由于Access没有与Excel相同的
Clean()
函数,因此必须使用以下函数创建一个函数:

Public Function Clean(InString As String) As String
'-- Returns only printable characters from InString
   Dim x As Integer
   For x = 1 To Len(InString)
      If Asc(Mid(InString, x, 1)) > 31 And Asc(Mid(InString, x, 1)) < 127 Then
         Clean = Clean & Mid(InString, x, 1)
      End If
   Next x

End Function 
Public函数Clean(作为字符串插入)作为字符串
'--仅返回指令串中的可打印字符
作为整数的Dim x
对于x=1至Len(安装)
如果Asc(Mid(InString,x,1))>31,且Asc(Mid(InString,x,1))<127,则
清洁=清洁和中间(仪表,x,1)
如果结束
下一个x
端函数

首先,您需要知道幽灵角色是什么。启用在文本编辑器(如记事本+)中查看隐藏字符,以发现不可见字符是什么。您还可以使用
Asc()
函数获取字符的ascii码。记事本++除了CR和FR之外没有显示任何新内容。不过,我找到了一个解决方案,我将发布。