我试图一次读取一个文本文件,进入一个字符串,搜索一个值,我知道里面存在。我使用的是FSO方法(ReadAll()),但Instr()函数没有找到该值。我想他只是导入了文件的一部分。
Sub read_File_At_once_FSO()
On Error Resume Next
Dim objFileSystemObject As Object
Dim strFileContent As String
Dim RowsInFile As Long
'Dim ColsInFile As Long
Dim FileSize As Long 'in bytes
Dim InStrPos As Long
Dim strFullPath As String
strFullPath = "G:Fusao de ClientesPRDIMP_ID1056001_J.TXT"
' Use late binding throughout this method to avoid having to set any references.
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
strFileContent = objFileSystemObject.OpenTextFile(strFullPath).readall()
' We have a matched string.
InStrPos = InStr(1, strFileContent, "0005790306", vbTextCompare)
If InStrPos > 0 Then
'get FileLen
FileSize = FileLen(strFullPath)
'Get the number of lines inside the file
With CreateObject("vbscript.regexp")
.Global = True
'.Pattern = "b" & varStrings(lngIndex) & "b" 'By using word boundary (b), you can specify in the regex pattern that you are searching for complete word(s). '"rn" ' or .Pattern = "n"
.Pattern = "rn" 'vbCrLf '.Pattern = "n" ' vbLf, Unix style line-endings
RowsInFile = .Execute(strFileContent).Count + 1
End With
End If
Set objFileSystemObject = Nothing
On Error GoTo 0
End Sub
我不知道如何将文件附加在附件中供您测试。
当我尝试阅读下面的代码时,我得到'Run Time Error 62: input past end of file'。
Function read_File_At_once()
Dim strFilename As String: strFilename = "G:Fusao de ClientesPRDIMP_ID1056001_J.TXT"
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilename For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
'Get the number of lines inside the file
With CreateObject("vbscript.regexp")
.Global = True
'.Pattern = "b" & varStrings(lngIndex) & "b" 'By using word boundary (b), you can specify in the regex pattern that you are searching for complete word(s). '"rn" ' or .Pattern = "n"
.Pattern = "rn" 'vbCrLf '.Pattern = "n" ' vbLf, Unix style line-endings
RowsInFile = .Execute(strFileContent).Count + 1
End With
Close #iFile
End Function
有人能帮忙吗?
您的文件是UTF-8, FSO不擅长阅读。您可以使用下面的函数,它将正确读取整个文件:
Function ReadUTF8(filePath As String) As String
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
.LoadFromFile filePath
ReadUTF8 = .ReadText()
.Close
End With
End Function
编辑-显然FSORead()
方法可以代替ReadAll()
Function FsoReadAll(filePath As String) As String
With CreateObject("Scripting.FileSystemObject")
FsoReadAll = .OpenTextFile(filePath, 1).read(.getFile(filePath).Size)
End With
End Function
从:https://stackoverflow.com/a/56434461/478884