Ler / processar o ficheiro de texto linha a linha na VBA
estou a tentar processar um documento de texto usando o VBA e devolver a localização indicada no ficheiro de texto.
Por exemplo, o ficheiro de texto pareceria com:
*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls
quero que o VBA carregue uma linha de cada vez, e se começar com um *
, então passe para a linha seguinte (semelhante à linha que está a ser comentada). Para as linhas com um caminho de arquivo, eu quero escrever esse caminho para a célula, diga A2
para o primeiro caminho, B2
para o próximo, etc.
2. Como posso fazer isso linha a linha?
4 answers
Para a leitura mais básica de um ficheiro de texto, use open
Exemplo:
Dim FileNum As Integer
Dim DataLine As String
FileNum = FreeFile()
Open "Filename" For Input As #FileNum
While Not EOF(FileNum)
Line Input #FileNum, DataLine ' read in data 1 line at a time
' decide what to do with dataline,
' depending on what processing you need to do for each case
Wend
Eu acho o FileSystemObject com um TxtStream a maneira mais fácil de ler arquivos
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
Então com este objeto você tem todos os tipos de ferramentas que intellisense pega (ao contrário do método de FreeFile()
para que haja menos adivinhação. Além disso, você não' tem que atribuir um FreeFile e espero que ele ainda é realmente livre desde quando você o atribuiu.
Podes ler um ficheiro como:
Do While Not txtStream.AtEndOfStream
txtStream.ReadLine
Loop
txtStream.Close
Nota: Isto requer uma referência ao tempo de execução de programação da Microsoft.
Para completar; trabalhar com os dados carregados na memória;
dim hf As integer: hf = freefile
dim lines() as string, i as long
open "c:\bla\bla.bla" for input as #hf
lines = Split(input$(LOF(hf), #hf), vbnewline)
close #hf
for i = 0 to ubound(lines)
debug.? "Line"; i; "="; lines(i)
next
Você pode usar este código para ler linha por linha em arquivo de texto e você também pode verificar sobre o primeiro personagem é"*", então você pode deixar isso..
Public Sub Test()
Dim ReadData as String
Open "C:\satheesh\myfile\file.txt" For Input As #1
Do Until EOF(1)
Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions
If Not Left(ReadData, 1) = "*" then
'' you can write the variable ReadData into the database or file
End If
Loop
Close #1
End Sub