Überflüssige Zeilenumbrüche entfernen

  • Hallo,
    ich versuche grad überflüssige Zeilenumbrüche in einem String zu entfernen. Leider ohne erfolgt.
    Hat jemand eine zündende Idee?

    Gruß Ingo

    [autoit]

    $PING_ret = Run(@ComSpec & " /c PING " & $Ziel, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    Sleep (1000)
    $line = $line & StdoutRead($PING_ret)
    If @error Then ExitLoop ; wenn ein Fehler beim Lesen aufgetreten ist verlassen

    ;??????
    StringReplace ( $line, @CRLF & @CRLF, @CRLF) ;doppele Zeilenvorschübe entfernen zur 1.
    StringReplace ( $line, @CR & @CR, @CR) ;doppele Zeilenvorschübe entfernen zur 2.
    StringReplace ( $line, @LF & @LF, @LF) ;doppele Zeilenvorschübe entfernen zur 3.
    StringReplace ( $line, @CR & @LF & @CR & @LF, @CR & @LF) ;doppele Zeilenvorschübe entfernen zur 4.
    Wend

    [/autoit]
    • Offizieller Beitrag

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    #include <Constants.au3>
    TCPStartup()
    $Ziel = TCPNameToIP('www.google.de')
    $PING_ret = Run(@ComSpec & " /c PING " & $Ziel, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    $line = ''
    While 1
    Sleep(1000)
    $line = $line & StdoutRead($PING_ret)
    If @error Then ExitLoop ; wenn ein Fehler beim Lesen aufgetreten ist verlassen
    $line = StringRegExpReplace($line, '\v{2,}', @CRLF)
    WEnd
    MsgBox(0, 0, $line)
    TCPShutdown()

    [/autoit]
  • Ists aus performance gründen net besser den regexpreplace nach der schleife zu machen? Oder spielt sowas keine Rolle?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    Naja, Performance spielt hier ja eher keine Rolle, aber an sich hast Du recht. Der Befehl muss ja nicht jedes Mal ausgeführt werden:

    Spoiler anzeigen
    [autoit]


    #include <Constants.au3>
    TCPStartup()
    $Ziel = TCPNameToIP('www.google.de')
    $PING_ret = Run(@ComSpec & " /c PING " & $Ziel, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    $line = ''
    Do
    Sleep(50)
    $line = $line & StdoutRead($PING_ret)
    Until @error
    $line = StringRegExpReplace($line, '\v{2,}', @CRLF)
    MsgBox(0, 0, $line)
    TCPShutdown()

    [/autoit]


    Der Sleepwert ist auch etwas hoch gewesen (verzögert nur das Ende der Schleife) und sollte hinter dem If stehen, damit die Schleife sofort nach dem @error verlassen werden kann.

    Edit: Oder mit Do...Until.

  • okay danke oscar :)

    Meine Frage hatte sich eher auf das allgemeine Regexp bezogen also ob ein kurzer String im Regexp (der öfters vorkommt) genauso schnell abgearbeitet wird wie ein langer string der nur einmal abgearbeitet wird.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hallo,
    das ist genau die Lösung! Super danke!!

    Der abgebildete Quelltext ist eigentlich nur ein Auszug aus einem größeren Programm. In der Schleife wird jede Sekunde eine GUI, mit dem gelesenen Daten aktualisiert. Daher das Sleep (1000) und die Bearbeitung des Strings innerhalb der Schleife.

    Gruß Ingo