it-swarm.com.de

Lesen / Analysieren Sie die Textdatei Zeile für Zeile in VBA

Ich versuche, ein Textdokument mit VBA zu analysieren und den in der Textdatei angegebenen Pfad zurückzugeben.
Zum Beispiel würde die Textdatei so aussehen:

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

Ich möchte, dass der VBA jeweils eine Zeile lädt. Beginnt er mit einem *, Wechselt er zur nächsten Zeile (ähnlich der zu kommentierenden Zeile). Für die Zeilen mit einem Dateipfad möchte ich diesen Pfad in die Zelle schreiben, sagen Sie A2 Für den ersten Pfad, B2 Für den nächsten usw.

Die wichtigsten Dinge, die ich zu beantworten hoffte, waren:
1. Was ist die beste/einfachste Möglichkeit, eine Textdatei mit VBA zu lesen?
2. Wie kann ich das Zeile für Zeile tun?

52
dancran

verwenden Sie open, um das grundlegendste Lesen einer Textdatei zu erhalten.

beispiel:

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

Ich finde das FileSystemObject mit einem TxtStream die einfachste Möglichkeit, Dateien zu lesen

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

Dann haben Sie mit diesem txtStream -Objekt alle Arten von Werkzeugen, die Intellisense aufgreift (anders als mit der FreeFile() -Methode), so dass es weniger Rätselraten gibt. Außerdem müssen Sie kein FreeFile zuweisen und hoffen, dass es tatsächlich noch frei ist, seitdem Sie es zugewiesen haben.

Sie können eine Datei wie folgt lesen:

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

HINWEIS: Dies erfordert einen Verweis auf Microsoft Scripting Runtime.

35
Brad

Zur Vollständigkeit; Arbeiten mit den in den Speicher geladenen Daten;

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.

Sie können diesen Code verwenden, um Zeile für Zeile in einer Textdatei zu lesen. Sie können auch überprüfen, ob das erste Zeichen "*" ist. Dann können Sie das belassen.

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