Zeile bestimmen und in eine Variable setzen?

  • Hi,
    ich lese mit StderrRead die DOS-Konsole aus.
    Das schaut dann ungefähr so aus:

    Danach wird bei jeder Aktualisierung (5 Sekunden), 8 mal der Status untereinander aufgelistet:

    Code
    "die erste Zeile ist eine Leerzeile"
    15981.433 kB / 60.83 sec (20.1%)
    ...

    Die zweite Zeile würde ich sehr gerne in eine Variable setzten.
    Damit ich den aktuellen Status, in einer Lable-Zeile, anzeigen lassen kann.

    Habt ihr bitte eine Idee, wie ich die zweite Zeile bestimmen kann?

    UPDATE:
    Ich bin eben auf StringRegExp gestossen:

    [autoit]


    $aResult = StringRegExp($line, "^\d(.*?)\)$", 1)

    [/autoit]

    Eigentlich sollte doch z.B. diese Zeile gefunden werden:
    15981.433 kB / 60.83 sec (20.1%)

    Aber irgendwie steckt da noch der Fehlerteufel drinne.

    Gruß
    Manta

    4 Mal editiert, zuletzt von Manta (4. Januar 2011 um 12:23) aus folgendem Grund: gelöst

  • Guten Morgen und ein gutes neues Jahr!

    zumindest musst Du dem StringRegExp mitteilen, dass da mehrere Zeilen sein können:

    [autoit]

    $aResult = StringRegExp($line, "(?m)^\d.*?\)$", 1)

    [/autoit]
  • Hallo Großvater,
    ich wünsche dir auch ein frohes Neues!

    Das mit dem StringRegExp haut leider noch nicht hin.
    Ich habe die Ausgabe (ohne StringRegExp) mit FileWriteLine in ein TXT-File speichern lassen.

    Der Inhalt wird ohne neue Zeile, hintereinanderweg gespeichert.
    Es wird nur mit so einem seltsamen viereck getrennt, dass auch am Zeilenanfang steht:

    Code
    □30792.675 kB / 163.87 sec (19.5%)□30792.675 kB / 163.87 sec (19.7%)□....

    Könnte das vielleicht der Fehler sein?

  • Hallo manta,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem, wenn du immer die 2. Zeile möchtest nimm doch einfach den line-Parameter von

    [autoit]

    FileReadLine

    [/autoit]

    .

    PS.: durch das Einkopieren ins Board wird evtl. das Steuerzeichen verändert, hänge deshalb in solchen Fällen die TXT-Datei als Anhang an,

    Frohes gutes neues Jahr autobert

  • Danke für die nette Begrüßung.

    Wenn ich das richtig verstanden habe, funktioniert FileReadLine nur mit geöffneten Textdokumenten (zusätzliche Datein würde ich am liebsten vermeiden).
    Ich habe es trotzdem mal getestet und nur die Variable eingetragen, die MsgBox ist dann aber komplett leer.

    Das ist der ganze Abschnitt, an dem ich zur Zeit festhänge:

    [autoit]


    $cmd = Run(@ComSpec & " /c " & $opt1 & $opt2[$a] & $opt3 & $opt4[$b],"", @SW_SHOW, 0x4)

    While 1
    $inhalt = StderrRead($cmd)
    If @error Then ExitLoop

    [/autoit][autoit][/autoit][autoit]

    $line = FileReadLine($inhalt, 2)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"test", $line)

    Sleep(5000)
    WEnd

    [/autoit]

    Lasse ich $inhalt mit einer MsgBox oder FileWriteLine ausgeben, erhalte ich immer den aktuellen CMD Inhalt.
    Im Anhang sind jetzt auch die korrekt formatierten Ausgaben (Testweise mit FileWriteLine erstellt)..

    Aber ich verstehe das irgendwie nicht... mit StringRegExp hätte das doch schon funktioneren müssen?


    Gruß
    Manta

  • Hallo Manta,

    sorry, da habe ich etwas durcheinander gebracht. Ich dachte du willst das Textfile auswerten.

    Evtl. reicht ja schon StringInStr:

    Spoiler anzeigen
    [autoit]

    $cmd = Run(@ComSpec & " /c " & $opt1 & $opt2[$a] & $opt3 & $opt4[$b],"", @SW_SHOW, 0x4)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $inhalt = StderrRead($cmd)
    If @error Then ExitLoop
    if StringInStr($inhalt,"kB / " Then
    $aFile = StringSplit($sTest,"?") ;mit Trennzeichen zwichen den Daten ersetzen
    ConsoleWrite($aFile[$aFile[0]] & @crlf)
    Sleep(5000)
    WEnd

    [/autoit]

    PS.: um welches Programm handelt es sich überhaupt?

    mfg autoBert

  • Dankeschön, jetzt hauts hin.
    StringInStr ist wirklich ein wunderschöner Befehl zum Prüfen.

    (PS.: Das Programm speichert Videostreams ab.)

    Gruß
    Manta