VBS - InStr im Loop klappt nicht
Hallo, der Spript liest die erste Zeile einer Textdatei ein und soll prüfen ob sich in dieser Zeile das Zeichen "-" befindet.
Aber das ganze steht in einem Loop, und darum funktioniert es nich wie normal.
Ich habe es nochmal getestet und jetzt klappt es ohne Loop auch nichtmer. :/
Gruß waldgnarf
Aber das ganze steht in einem Loop, und darum funktioniert es nich wie normal.
Set FSO=CreateObject("Scripting.FileSystemObject")
Set DATEI=FSO.GetFile("BLN.txt")
Do
ZEILE=DATEI.OpenAsTextStream(1).ReadLine
If InStr(ZEILE,"-")<>0 Then
MsgBox ZEILE
End If
LOESCHEN=DATEI.OpenAsTextStream(1).ReadAll&vbCrLF:DATEI.OpenAsTextStream(2).Write Replace(Mid(LOESCHEN,InStr(LOESCHEN,vbCrLF)+2),Chr(34),"")
Loop Until ZEILE=""
Ich habe es nochmal getestet und jetzt klappt es ohne Loop auch nichtmer. :/
Gruß waldgnarf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97975
Url: https://administrator.de/forum/vbs-instr-im-loop-klappt-nicht-97975.html
Ausgedruckt am: 23.12.2024 um 13:12 Uhr
8 Kommentare
Neuester Kommentar
Hallo waldgnarf!
Wenn Du nur die erste Zeile benötigst, ist ja die Schleife ohnehin überflüssig, es genügt:
Abgesehen davon: Was genau willst Du eigentlich erreichen?
Derzeit werden (unabhängig vom Inhalt der Zeile 1) aus der angegebenen Datei die gesamte Zeile 1 sowie alle Anführungszeichen entfernt.
Grüße
bastla
Wenn Du nur die erste Zeile benötigst, ist ja die Schleife ohnehin überflüssig, es genügt:
ZEILE=DATEI.OpenAsTextStream(1).ReadLine
Derzeit werden (unabhängig vom Inhalt der Zeile 1) aus der angegebenen Datei die gesamte Zeile 1 sowie alle Anführungszeichen entfernt.
Grüße
bastla
Hallo waldgnarf!
Verstehe ich es so richtig?
Was hattest Du mit den Anführungszeichen = Chr(34) vor?
Grüße
bastla
Verstehe ich es so richtig?
- Es sollen alle Zeilen einzeln eingelesen werden.
- Die erste Zeile soll, falls sie ein "-" enthält, als MsgBox ausgegeben werden, alle anderen Zeilen nicht.
- Die erste Zeile soll auf jeden Fall gelöscht werden.
- Alle weiteren Zeilen sollen, wenn sie kein "-" enthalten, ebenfalls gelöscht werden.
Was hattest Du mit den Anführungszeichen = Chr(34) vor?
Grüße
bastla
Hallo waldgnarf!
Dann sollte ja genügen:
Ist es übrigens Absicht, dass am Ende der Datei eine zusätzliche Zeilenschaltung eingefügt wird?
Grüße
bastla
Dann sollte ja genügen:
Set FSO=CreateObject("Scripting.FileSystemObject")
Set DATEI=FSO.GetFile("BLN.txt")
ZEILE=DATEI.OpenAsTextStream(1).ReadLine
If InStr(ZEILE,"-")<>0 Then MsgBox ZEILE
LOESCHEN=DATEI.OpenAsTextStream(1).ReadAll & vbCrLF
DATEI.OpenAsTextStream(2).Write Mid(LOESCHEN,InStr(LOESCHEN,vbCrLF)+2)
Grüße
bastla
Hallo waldgnarf!
Das Zeichen in dem von Dir geposteten Beispieltext ist kein "-", sondern ein "–" .
Auch wenn die beiden Zeichen sich optisch eigentlich nicht so sehr unterscheiden, ist doch das erste ein Chr(45), aber das zweite ein Chr(150).
Entweder gibst Du es daher mit der Tastenkombination Alt + 0150 (am Ziffernblock) ein, oder Du kopierst dieses Zeichen einfach aus der Textdatei in Deinen Code.
Um übrigens zu überprüfen, ob ein Wort ausschließlich aus Großbuchstaben besteht, gibt es verschiedene Möglichkeiten - wenn es schon genügt, festzustellen, dass keine Kleinbuchstaben enthalten sind, könnte das so aussehen:
Das erste Wort in diesem Beispiel ist übrigens der Teil der Zeile vor dem ersten Leerzeichen.
Grüße
bastla
P.S.: Manchmal erweist es sich dann doch als vorteilhaft, in der Problembeschreibung etwas konkreter zu sein ...
Das Zeichen in dem von Dir geposteten Beispieltext ist kein "-", sondern ein "–" .
Auch wenn die beiden Zeichen sich optisch eigentlich nicht so sehr unterscheiden, ist doch das erste ein Chr(45), aber das zweite ein Chr(150).
Entweder gibst Du es daher mit der Tastenkombination Alt + 0150 (am Ziffernblock) ein, oder Du kopierst dieses Zeichen einfach aus der Textdatei in Deinen Code.
Um übrigens zu überprüfen, ob ein Wort ausschließlich aus Großbuchstaben besteht, gibt es verschiedene Möglichkeiten - wenn es schon genügt, festzustellen, dass keine Kleinbuchstaben enthalten sind, könnte das so aussehen:
Wort = Split(ZEILE)
If Wort(0) = UCase(Wort(0)) Then MsgBox "Das erste Wort der Zeile enthält keine Kleinbuchstaben."
Grüße
bastla
P.S.: Manchmal erweist es sich dann doch als vorteilhaft, in der Problembeschreibung etwas konkreter zu sein ...