web-dev-qa-db-fra.com

Lire / analyser le fichier texte ligne par ligne dans VBA

J'essaie d'analyser un document texte à l'aide de VBA et de renvoyer le chemin indiqué dans le fichier texte.
Par exemple, le fichier texte ressemblerait à ceci:

*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls

Je veux que le VBA charge une ligne à la fois, et s'il commence par un *, puis passe à la ligne suivante (similaire à la ligne commentée). Pour les lignes avec un chemin de fichier, je veux écrire ce chemin dans une cellule, disons A2 pour le premier chemin, B2 pour le suivant, etc.

Les principales choses que j'espérais avoir une réponse étaient:
1. Quel est le moyen le plus simple et le plus simple de lire un fichier texte à l’aide de VBA?
2. Comment puis-je faire cela ligne par ligne?

52
dancran

pour la lecture la plus élémentaire d’un fichier texte, utilisez open

exemple:

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
66
SeanC

Je trouve que FileSystemObject avec TxtStream est le moyen le plus simple de lire des fichiers.

Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)

Ensuite, avec cet objet txtStream, vous disposez de toutes sortes d’outils que intellisense utilise (contrairement à la méthode FreeFile()) afin d’éviter les approximations. De plus, vous n’avez pas à assigner un FreeFile et espérez qu’il est toujours libre depuis le moment où vous l’avez assigné.

Vous pouvez lire un fichier comme:

Do While Not txtStream.AtEndOfStream
    txtStream.ReadLine
Loop
txtStream.Close

REMARQUE: cela nécessite une référence à Microsoft Scripting Runtime.

35
Brad

Pour être complet; travailler avec les données chargées en mémoire;

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
31
Alex K.

Vous pouvez utiliser ce code pour lire ligne par ligne dans un fichier texte. Vous pouvez également vérifier si le premier caractère est "*", puis vous pouvez le laisser.

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
2
satheesh kumar