string auslesen und vergleichen

Deklaration im allgemeinen Teil
Visual Basic:
Public Declare !!Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Grüsse bb

Wenn ich dies bei mir einfüge kommt:
Kompilierungsfehler in Microsoft VBScript: Anweisungsende erwartet
Die Stelle wo der Fehler liegt hab ich dir oben mit !! markiert.

Mfg der dynamofan
 
OK vielen Dank! Bis dorthin funktionierts schon.

Jetzt kommt aber (meiner Meinung nach) der schwierigere Teil:
Als "then" soll keine "Msgbox" erfolgen, sondern es soll aus der "list.txt" die nächste darunterstehende Zeile ausgelesen werden und die Überprüfung von vorn beginnen.


Mfg der dynamofan

Kannst ja mal deine Meinung zu meiner theoretischen Lösung sagen:
in der txt einen pointer setzen, aus dem "then" mit "go to"o.ä. nach oben in strInhalt springen und den Pointer+1

Und hier nochmal mein kompletter Script zur Übersicht:
Visual Basic:
' +++ Konstanten und Variablen deklarieren
Const fsForReading = 1
Dim strDateiname, strInhalt
Dim objFs           ' FileSystemObject Objekt
Dim objTextStream   ' Textstream Objekt

' +++ Datei, deren Inhalt gelesen wird:
strDateiname = "C:\...\Desktop\list.txt"
' +++ FileSystemObject anlegen und in fs speichern:
Set objFs = CreateObject("Scripting.FileSystemObject")
' +++ Textstream oeffnen, erlaubt Zugriff auf den Inhalt der Datei
Set objTextStream = objFs.OpenTextFile(strDateiname, fsForReading)
' +++ Gesamten Datei-Inhalt lesen und ausgeben
strInhalt = objTextStream.ReadLine
    If InStr(1, strInhalt, "backup1.cmd", vbTextCompare) = suche Then
        MsgBox ("nix da!")
    Else
        WScript.Sleep 30000 '+++warte 30 Sec
    End If
' +++ Textstream schliessen
objTextStream.Close

Also wie gesagt, nur theoretisch, praktisch weiß ich ne obs so geht.
 
Zuletzt bearbeitet:
Goto finde ich immer schlecht weil es die Sache unübersichtlich macht also hier jetzt mein Vorschlag:

Visual Basic:
abbruch = false
while not abbruch 
     strInhalt = objTextStream.ReadLine 
      If InStr(1, strInhalt, "backup1.cmd", vbTextCompare) = suche Then
        if obTextStream.atEndOfStream then
            msgbox("Suchtext nicht gefunden")
        end if 
    Else
      abbruch = true 
    end if 
wend
WScript.Sleep 30000 '+++warte 30 Sec


Beachte das instr als rückgabe eine Zahl liefert! Das birgt noch etwas Fehlerpotential
Grüsse bb

PS: auch ich freue mich über eine positive Bewertung wenn ich dir geholfen haben sollte
 
Goto finde ich immer schlecht weil es die Sache unübersichtlich macht also hier jetzt mein Vorschlag:

Visual Basic:
abbruch = false
while not abbruch 
     strInhalt = objTextStream.ReadLine 
      If InStr(1, strInhalt, "backup1.cmd", vbTextCompare) = suche Then
        if obTextStream.atEndOfStream then
            msgbox("Suchtext nicht gefunden") 'ausgabe der Textbox
        end if 'schliest das If !?
    Else 
      abbruch = true 'bricht die If Abfrage ab 
    end if 
wend ' springt im script nach oben?, wenn ja aber wohin?
WScript.Sleep 30000 '+++warte 30 Sec


Beachte das instr als rückgabe eine Zahl liefert! Das birgt noch etwas Fehlerpotential
Grüsse bb

PS: auch ich freue mich über eine positive Bewertung wenn ich dir geholfen haben sollte

Hallo,
könntest du mir vielleicht noch einmal den code erklären?
Ich hab dir oben im Script mal ein par Notizen hinzugefügt, kannst mir ja mal bitte eine Rückmeldung geben in wie fern diese richtig sind.

Mfg der dynamofan
 
Visual Basic:
abbruch = False                         ' Setzen der Abbruchbedingung
    While Not abbruch                       'Schleife Beginn
        strInhalt = objTextStream.ReadLine  ' Zeile einlesen
        If InStr(1, strInhalt, "backup1.cmd", vbTextCompare) = suche Then
            If obTextStream.atEndOfStream Then ' Falls das Ende des Files erreicht wurde
                MsgBox ("Suchtext nicht gefunden") 'Warnmeldung
            End If 'schliest das letzte If !
        Else
            ' gefunden also while Schleife verlassen und 30sec. warten
            abbruch = True ' Setzt die Abbruch bedingung
        End If
    Wend ' springt im script nach oben? zum While
    WScript.Sleep 30000 '+++warte 30 Sec

So jetzt habe ich mal meine kommentare dran gesetzt ;-)

Grüsse bb
 
Sehr schön!
Soweit funktionierts jetzt schon.:)

Funktioniert es auch das es mir nach nicht nur einem Suchwort sucht sondern nach mehreren? z.B. die getrennt mit Symikolon o.ä. getrennt stehen.

Also ich sag es gleich ganz konkret was am Ende entstehen soll:
Der Script soll überprüfen ob 4 Prozesse die in der plist.txt stehen zur Zeit (also vergleichen mit einer anderen txt, wo die prozesse drinstehen) laufen, wenn ja warten (funktioniert ja schon), wenn nein nächsten Prozess aus der list.txt überprüfen (funktioniert ja auch schon).

Also müsste man theoretisch 4 Suchwörter einsetzen. Aber das funktioniert wahrscheinlich nicht, denk ich, oder?

Mfg der dynamofan

PS: wenn der Script dann fertig ist geb ich eine richtig gut Bewertung für dich ab!
 
Wenn du vier Texte suchen willst musst du leider auch vier mal suchen.

Man kann dann vielleicht die Schleife aber so umbauen, das er die datei nur einmal durchliest.

Grüsse bb
 
Wenn du vier Texte suchen willst musst du leider auch vier mal suchen.

Man kann dann vielleicht die Schleife aber so umbauen, das er die datei nur einmal durchliest.

Grüsse bb

Aha, könntest du mir da vielleicht ein bischen auf die sprünge helfen? Ich hab leider noch keinen Plan wie das dann aussehen müsste.

Mfg der dynamofan

Nochmal ganz kurz das Ziel: Script soll vermeiden das mehr als 4 Prozesse die in der plist.txt stehen gleichzeitig laufen.
 
Zuletzt bearbeitet:
Da du nach vier unterschiedlichen Prozessen suchst, speicher dir deinen Fund in einer Variablen ( am besten als Zahl ) BSP

cmd = 1
prozess2 = 2
Prozess3 = 4
und Prozess4 = 6

dann machst du deine Instr. abfragen :
Visual Basic:
   If InStr(1, strInhalt, "backup1.cmd", vbTextCompare) <> suche then
         gefunden = 1
Achtung hier habe ich = gegen <> getauscht weil es einfacher ist so rum
Visual Basic:
   If InStr(1, strInhalt, "process2", vbTextCompare) <> suche then
         gefunden = gefunden  and 2
...
Dann musst du die Variable Abbruch setzten
Visual Basic:
abbruch = (gefunden = 13) ' du willst ja nur abbrechen wenn alle 4 Prozesse da sind
if not abbruch then
 abbruch = obTextStream.atEndOfStream 'Textfile zu ende also auch abbruch
end if

Grüsse bb

PS: Ich hoffe du kannst mir folgen. ;-) Vielleicht mache ich das auch einfach schon zu lange
 

Neue Beiträge

Zurück