I'm trying to read a text file at once, into a string, to search for a value that I know that exists inside. I'm using the FSO Method (ReadAll()), but the Instr() function doesn't find that value. I think he is importing just a part of the file.
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 Clientes\PRD\IMP_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). '"\r\n" ' or .Pattern = "\n"
.Pattern = "\r\n" '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
I dont know how to atach the file for you to test it.
When I try to read with the code below, I'm geting the 'Run Time Error 62 : Imput past end of file'.
Function read_File_At_once()
Dim strFilename As String: strFilename = "G:\Fusao de Clientes\PRD\IMP_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). '"\r\n" ' or .Pattern = "\n"
.Pattern = "\r\n" 'vbCrLf '.Pattern = "\n" ' vbLf, Unix style line-endings
RowsInFile = .Execute(strFileContent).Count + 1
End With
Close #iFile
End Function
Can anyone help please?
Your file is UTF-8, which FSO is not good at reading. You can use something like the function below, and it will read the entire file correctly:
Function ReadUTF8(filePath As String) As String
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
.LoadFromFile filePath
ReadUTF8 = .ReadText()
.Close
End With
End Function
EDIT - apparently the FSO Read()
method can work in place of ReadAll()
Function FsoReadAll(filePath As String) As String
With CreateObject("Scripting.FileSystemObject")
FsoReadAll = .OpenTextFile(filePath, 1).read(.getFile(filePath).Size)
End With
End Function