waldgnarf
Goto Top

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.

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

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

bastla
bastla 27.09.2008 um 12:45:37 Uhr
Goto Top
Hallo waldgnarf!

Wenn Du nur die erste Zeile benötigst, ist ja die Schleife ohnehin überflüssig, es genügt:
ZEILE=DATEI.OpenAsTextStream(1).ReadLine
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
waldgnarf
waldgnarf 27.09.2008 um 13:08:12 Uhr
Goto Top
Hi bastla, ich wollte im Loop das die eingelesene Zeile falls sie ein "-" enhält als MsgBox ausgegeben und dann wie die anderen Zeilen die kein "-" enthalten gelöscht wird, dann zur nächsten Zeile ... .
bastla
bastla 27.09.2008 um 13:15:35 Uhr
Goto Top
Hallo waldgnarf!

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
waldgnarf
waldgnarf 27.09.2008 um 13:47:48 Uhr
Goto Top
Es soll immer nur die erste Zeile eingelesen und dann gelöscht werden, und wenn die eingelesene Zeile ein ein Bindestrich enthält (irgendwo in der Mitte) dann soll die als MsgBox ausgegeben werden.

Ich bin ja noch anfänger im VBS und hab etwas wenn man so will aufgeschnappt ;), habe noch nicht nachgesehn was genau Chr(34) bedeutet.

Gruß waldgnarf
bastla
bastla 27.09.2008 um 14:14:23 Uhr
Goto Top
Hallo waldgnarf!

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)
Ist es übrigens Absicht, dass am Ende der Datei eine zusätzliche Zeilenschaltung eingefügt wird?

Grüße
bastla
waldgnarf
waldgnarf 27.09.2008 um 14:46:06 Uhr
Goto Top
Es funktioniert leider nicht, die Strings sehen z.B. so aus:
ANACARDIACEAE – Sumachgewächse
Mangifera indica / Mango
CORYLACEAE – Haselnussgewächse
Corylus avellana / Gewöhnliche Haselnuss

aber es kommt keine MsgBox Ausgabe bei enthalten eines Bindestrich

Im Prinziep geht es mir ja nur um das Unterscheiden von Arten und Pflanzen.
Aber ich hab nix passendes finden können was mit Grossbuchstaben zu tun hat.

Gruß waldgnarf
bastla
bastla 27.09.2008 um 15:59:58 Uhr
Goto Top
Hallo waldgnarf!

Das Zeichen in dem von Dir geposteten Beispieltext ist kein "-", sondern ein "–" face-wink.

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."  
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 ...
waldgnarf
waldgnarf 27.09.2008 um 17:56:21 Uhr
Goto Top
:D, ja das Stimmt das mach ich nächstes mal besser, vielen vielen Dank bastla und noch schönes Wochenende.

Grüße waldgnarf