Frage von MrCommandBlock, 32

Mit VBS eine datei auslesen?

Ich möchte in VBS einfach eine datei auslesen, und dise dan in einer MsgBox ausgeben.

Kann mir jemand den code dazu geben ?

Ich hoffe, dass die anwendung so leicht wie bei Batch ist...:

set /p "x="<"PfadZurTextdatei\Textdatei.txt"

Nur dise Funktion in VBS

Antwort
von Suboptimierer, 27
Dim s
Dim fso
Dim file

Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("Datei auslesen.txt") s = file.ReadAll() file.Close
MsgBox s

Ich finde es leichter, wenn auch länger, weil die einzelnen Schritte nachvollziehbarer sind. 

Kommentar von MrCommandBlock ,

Danke.. Also int in disem fall "s" die variable oder ?

Kommentar von MarkusGenervt ,

Schau Dir doch einfach mal die erste Codezeile an.

Also das solltest Du schon mindestens wissen.

Kommentar von Suboptimierer ,

s, fso und file sind Variablen. Die Zeilen mit "Dim" kann man auch weglassen, wenn man nicht "Option Explicit" verwendet. Es zeugt aber von gutem Programmierstil, die Variablen aufzuführen, die du verwenden möchtest.

Wenn du ein Fan von kurzem Code bist, kannst du versuchen, das alles in eine Zeile zu packen. Dann hast du aber das gleiche Problem mit der Wartbarkeit wie beim Batch.

MsgBox CreateObject("Scripting.FileSystemObject").OpenTextFile("Datei auslesen.txt").ReadAll()

Zum Beispiel weiß man bei dieser Variante nicht, ob nach Abarbeitung des Scripts die Datei automatisch wieder ordnungsgemäß geschlossen wird.
Das Nachschlagen in Handbüchern kann man sich sparen, indem man selbst die Datei schließt.

Kommentar von MarkusGenervt ,

Das schöne bei Basic ist, dass alle offenen Dateien spätestens mit dem Beenden des Interpreters automatisch mit geschlossen werden (-> garbage collection). Daher ist es nicht unbedingt erforderlich – bei so einfachen Programmen –, auch immer wieder einen Close-Befehl hinterher zu schießen.

In Deinem Beispiel wird bereits das Handle zu "Datei auslesen.txt" mit der Heap-Freigabe der "file"-Variable geschlossen.

Aber es ist einfach sauberer ;)

Antwort
von MarkusGenervt, 17

Mit der Codezeile überlädst Du u.U. den Umgebungsspeicher.

Schau Dir mal diese Hilfe an:

FOR /?

Das geht viel eleganter.

Allerdings geht es noch sehr viel einfacher mit:

type "Meine Datei.txt" | more

Sogar gleich mit seitenweiser Pause-Funktion.

Ansonsten, was Suboptimierer sagt.

Kommentar von MrCommandBlock ,

naja ich muss die halt in ne variable reinbekommen Danke

Kommentar von MarkusGenervt ,

Wie gesagt, Suboptimierer's Beispiel ist schon ziemlich rund.

Aber ich würde da lieber eine Sicherheits-Prüfung vorschalten, denn wenn der anzuzeigende Text zu groß ist, kleistert Dir die MsgBox ratz-fatz den Bildschirm zu.

Daher solltest Du besser den Datei-Inhalt portionsweise ausgeben. Ich greife das oben mal auf:

For p = 0 To Len(s) Step 8192
MsgBox Mid(s, p, 8192)
Next

Keine passende Antwort gefunden?

Fragen Sie die Community