Script/Funktion gesucht und Hilfe Benötigt

  • Hallo Zusammen,

    ich benötige für ein Skript eine Funktion die nach einem Wort sucht und mir noch Zeichen und Zahlen davor mit ausgibt.
    Ist ein bisschen schwierig zu erklären ich zeige es euch Anhang eines Beispiels:

    Ausgelesen wird während eines Zugriffs auf einen Switch/Router oder Sonstiges aus einem Log:

    Code
    Interface              IHQ   IQD  OHQ   OQD  RXBS RXPS  TXBS TXPS TRTL
    ------------------------------------------------------------------------
      Ethernet0/0              0     0    0     0     0    0     0    0    0
    * Ethernet0/1              0     0    0     0  2000    2     0    0    0
    NOTE:No separate counters are maintained for subinterfaces

    Ausgelesen Soll in diesem Fall:
    Ethernet0/0 und Ethernet0/1
    Dies Variiert aber von Router zu Router zu Switch zu Switch. Es heist nicht nur Ethernet0/0 sondern auch FastEthernet0/0 oder GigabitEthernet0/0 und so weiter und so Fort.
    Kennt ihr eine Möglichkeit wie das funktionieren könnte?

    Danke und Gruß N4psta!

  • Man könnte Zeilenweise durchgehen, erst nach der Strichellinie anfangen zu suchen und dann mit StringTrim* + StringInStr das Leerzeichen hinter der Bezeichnung rausfiltern und damit den vorderen Teil der Zeile abtrennen.
    Besonderns flexibel, und für genau solche Fälle gedacht, lässt sich das ganze auch über reguläre Ausdrücke filtern:

    [autoit]

    #include <Array.au3>
    $s_String = ClipGet()

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

    $a_RegEx = StringRegExp($s_String, "(?m)^[\s\*]+(\S*)", 3)
    If @error Then
    MsgBox(48, "", "Irgendwas schief gelaufen." & @CRLF & "@Error = " & @error)
    Else
    _ArrayDisplay($a_RegEx, "Ergebnis")
    EndIf

    [/autoit]
  • Mithilfe von RegExp lässt sich das realisieren. Im Grunde so:

    [autoit]

    #include <Array.au3>

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

    $sString = _
    ' Interface IHQ IQD OHQ OQD RXBS RXPS TXBS TXPS TRTL' & @CRLF & _
    '------------------------------------------------------------------------' & @CRLF & _
    ' Ethernet0/0 0 0 0 0 0 0 0 0 0' & @CRLF & _
    '* Ethernet0/1 0 0 0 0 2000 2 0 0 0' & @CRLF & _
    'NOTE:No separate counters are maintained for subinterfaces'

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

    $aArr = StringRegExp($sString, '[^ ]*Ethernet\d/\d', 3)
    _ArrayDisplay($aArr)

    [/autoit]


    €dit: Mist, zu langsam ^^

  • Er hatte da einen Text vorher stehen den er allerdings mal eben so schnell wieder weg editiert hat. :D
    Bei deinem Code werden auch Eingaben entgegen genommen die eben nicht die Bezeichnung "Ethernet" im Namen tragen.
    Und das wollte er nicht. Naja, die Beispieldaten waren wohl nicht so umfangreich. ^^

    Jedenfalls: Dein Code hatte nicht ganz das gewünschte Ergebnis geliefert. :)