String verarbeitung.

  • Ich habe eine TXT Datei mit folgendem inhalt die die jeweils so aufgebaut ist.

    autoit.de/wcf/attachment/9240/


    1.
    Ich möchte aus der TXT einen bestimmten Hostnamen Suchen. Dann dessen Ip aus der Liste und die MAC.

    Also suche Host "HOST13581" wenn er sie findet dann soll folgendes wieder geben:

    $mac= 000bcd479c21
    $IP= 192.168.91.176
    $IpBroadcast= 192.168.91.255


    Anschliessend Will ich in dem netz wo sich der PC befindet also in diesem Fall 192.168.91.*
    einen rechner der an ist und etwas remote ausführen.

    2.
    Ich möchte aus der TXT mehrere txt's anlegen.
    so sollte dann die txt aufgebaut sein:
    192.168.88.txt > inhalt alle Mac Addressen die aus dem segment 192.168.88 sind"Wichtig nur die MAC'S wo der Hostname mit "HOST" beginnt.


    192.168.88.txt
    so der inhalt:
    0030051D4161
    000BCD20F4D4

    Wie mache ich das am besten?

    Dateien

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Wo ist denn der Ansatz? Gar keine Idee?

    1. Die .txt in ein 2D Array lesen (gibts ne UDF von Bugfix)
    2. Durchs Array loopen und nach dem gesuchten Host suchen

    [autoit]


    ;pseudocode

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

    if StringinStr($array[$i][1], $ssearch) then
    $ret = $array[$i][0] & $array[$i][1] & $array[$i][2] ;usw.
    return $ret

    [/autoit]
  • um die ip und mac zu suchen kannst du das hier verwenden:

    [autoit]

    $file=FileRead("pclist.txt")
    $name="HOST13361"
    $Ipa=StringRegExp($file,"(\d+.\d+.\d+.\d+) "&$name&" .+:.+:.+:.+:.+:.+ \d+.\d+.\d+ \d+:\d+:\d+",3)
    $maca=StringRegExp($file,"\d+.\d+.\d+.\d+ "&$name&" (.+:.+:.+:.+:.+:.+) \d+.\d+.\d+ \d+:\d+:\d+",3)
    $ip=$ipa[0]
    $mac=$maca[0]

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Probier das hier :D
    sollte klappen

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $File = FileRead(@ScriptDir & "\pclist.txt")
    $reg = StringRegExp($File, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([^\s]+)\s+([a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2})", 3)
    If IsArray($reg) And Mod(UBound($reg), 3) = 0 Then
    Dim $Info[UBound($reg) / 3][4]
    Local $c = 0
    For $i = 0 To UBound($reg) - 1 Step 3
    $Info[$c][0] = $reg[$i + 1]
    $Info[$c][1] = StringReplace($reg[$i + 2], ":", "")
    $Info[$c][2] = $reg[$i]
    $Info[$c][3] = StringRegExpReplace($reg[$i], "(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3}", "$1.255")
    $c += 1
    Next

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

    _ArrayDisplay($Info,"Ausgabe",-1,0,"","|","Index|Name|Mac|IP|IpBroadcast");Ausgabe aller Items

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

    MsgBox(0, "Ausgabe Item 10", "Testausgabe des 10.Items:" & @CRLF & _
    "Name" & @TAB & @TAB & "=" & @TAB & $Info[9][0] & @CRLF & _
    "$mac" & @TAB & @TAB & "=" & @TAB & $Info[9][1] & @CRLF & _
    "$IP" & @TAB & @TAB & "=" & @TAB & $Info[9][2] & @CRLF & _
    "IpBroadcast" & @TAB & "=" & @TAB & $Info[9][3])
    EndIf

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • XovoxKingdom
    Kriege diesen Fehler?
    Was läuft falsch?

    waker.au3(15,78) : ERROR: _ArrayDisplay() called with wrong number of args.
    _ArrayDisplay($Info,"Ausgabe",-1,0,"","|","Index|Name|Mac|IP|IpBroadcast")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\array.au3(315,148) : REF: definition of _ArrayDisplay().
    Func _ArrayDisplay(Const ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Was läuft hier falsch?

    waker02.au3 (5) : ==> Subscript used with non-Array variable.:
    $ip=$ipa[0]
    $ip=$ipa^ ERROR
    ->14:48:48 AutoIT3.exe ended.rc:1

    [autoit]

    $file=FileRead("pclist.txt")
    $name="HOST13361"
    $Ipa=StringRegExp($file,"(\d+.\d+.\d+.\d+) "&$name&" .+:.+:.+:.+:.+:.+ \d+.\d+.\d+ \d+:\d+:\d+",3)
    $maca=StringRegExp($file,"\d+.\d+.\d+.\d+ "&$name&" (.+:.+:.+:.+:.+:.+) \d+.\d+.\d+ \d+:\d+:\d+",3)
    $ip=$ipa[0]
    $mac=$maca[0]

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Fehler 1 liegt an deiner Autoitversion
    Fehler 2 ist der typische Arrayfehler, d.h. kein Treffer (-> kein Array) und da keine @error Abfrage da ist bevor aufs Array zugegriffen wird, kommt eben die Meldung.

  • XovoxKingdom
    Funktioniert Danke...
    Wie kann ich den für einen bestimmten Host folgendes Rauskriegen?
    Als Beispiel:
    $mac= 000bcd479c21
    $IP= 192.168.91.176
    $IpBroadcast= 192.168.91.255

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hmmm?

    Kriege die MSG BOX ??
    Was lüft falsch habe auch die aktuelle autoit?

    [autoit]

    $file=FileRead("pclist.txt")
    $name="HOST13361"
    $Ipa=StringRegExp($file,"(\d+.\d+.\d+.\d+) "&$name&" .+:.+:.+:.+:.+:.+ \d+.\d+.\d+ \d+:\d+:\d+",3)
    $maca=StringRegExp($file,"\d+.\d+.\d+.\d+ "&$name&" (.+:.+:.+:.+:.+:.+) \d+.\d+.\d+ \d+:\d+:\d+",3)

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

    If Not @error Then
    $ip=$ipa[0]
    $mac=$maca[0]
    Else
    MsgBox(0, "Fehler", "Test")
    EndIf

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Ohne Spaltenangabe bei _Arraydisplay klappts auch bei dir mit der (alten) Version:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $File = FileRead(@ScriptDir & "\pclist.txt")
    $reg = StringRegExp($File, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([^\s]+)\s+([a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2}:[a-fA-F\d]{2})", 3)
    If IsArray($reg) And Mod(UBound($reg), 3) = 0 Then
    Dim $Info[UBound($reg) / 3][4]
    Local $c = 0
    For $i = 0 To UBound($reg) - 1 Step 3
    $Info[$c][0] = $reg[$i + 1]
    $Info[$c][1] = StringReplace($reg[$i + 2], ":", "")
    $Info[$c][2] = $reg[$i]
    $Info[$c][3] = StringRegExpReplace($reg[$i], "(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3}", "$1.255")
    $c += 1
    Next
    #cs
    ;Besorge dir die neuste AutoItversion, dann sollte es auch mit der folgenden Zeile klappen!
    _ArrayDisplay($Info,"Ausgabe",-1,0,"","|","Index|Name|Mac|IP|IpBroadcast");Ausgabe aller Items
    #ce

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

    _ArrayDisplay($Info); Ausgabe ohne Spaltenbenennung

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

    MsgBox(0, "Ausgabe Item 10", "Testausgabe des 10.Items:" & @CRLF & _
    "Name" & @TAB & @TAB & "=" & @TAB & $Info[9][0] & @CRLF & _
    "$mac" & @TAB & @TAB & "=" & @TAB & $Info[9][1] & @CRLF & _
    "$IP" & @TAB & @TAB & "=" & @TAB & $Info[9][2] & @CRLF & _
    "IpBroadcast" & @TAB & "=" & @TAB & $Info[9][3])
    EndIf

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

    #cs
    Ausgabe des _ArrayDisplays:

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

    "Index|Name|Mac|IP|IpBroadcast"

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

    [0]|HOST13341|0030051D4161|192.168.88.98|192.168.88.255
    [1]|HOST13361|0030051E5900|192.168.97.20|192.168.97.255
    [2]|HOST13518|000BCD20F4D4|192.168.88.53|192.168.88.255
    [3]|HOST13520|000BCD205D62|192.168.81.127|192.168.81.255
    [4]|HOST13521|000BCD2170BC|192.168.40.79|192.168.40.255
    [5]|HOST13527|000802b701c5|192.168.64.49|192.168.64.255
    [6]|HOST13787|0030056C8DC1|192.168.65.40|192.168.65.255
    [7]|HOST13570|000bcd45d141|192.168.65.32|192.168.65.255
    [8]|HOST13580|000bcd479c0e|192.168.90.140|192.168.90.255
    [9]|HOST13581|000bcd479c21|192.168.91.176|192.168.91.255
    [10]|Server13787|0030056C8DC1|192.168.69.40|192.168.69.255
    [11]|Server3570|000bcd45d141|192.168.61.32|192.168.61.255
    [12]|Server13580|000bcd479c0e|192.168.93.140|192.168.93.255
    [13]|Server3581|000bcd479c21|192.168.94.176|192.168.94.255

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

    #ce

    [/autoit]


    PS: Lad dir einfachheitshalber das neuste Update ;)

    Mit @AutoItVersion bekommste deine Version... aktuell müsste 3.3.6.1 sein (die habe ich)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • [autoit]

    $file=FileRead("pclist.txt")
    $name="HOST13361"
    $Ipa=StringRegExp($file,"(\d+.\d+.\d+.\d+) "&$name&" .+:.+:.+:.+:.+:.+ \d+.\d+.\d+ \d+:\d+:\d+",3)
    $maca=StringRegExp($file,"\d+.\d+.\d+.\d+ "&$name&" (.+:.+:.+:.+:.+:.+) \d+.\d+.\d+ \d+:\d+:\d+",3)

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

    If Not @error Then
    $ip=$ipa[0]
    $mac=$maca[0]
    Else
    MsgBox(0, "Fehler", @error)
    EndIf

    [/autoit]


    Vermutlich einfach der Errorcode für "no match"?
    Demnach stimmt das Pattern nicht und müsste angepasst werden.

  • Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sText= FileRead(FileOpenDialog("Datei wählen","","All (*.*)"))
    If @error Then $sText = ClipGet()

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

    $aData = StringRegExp($sText,"(\S+)\s+(\S+)\s+(\S+)\s+(\S+\s+\S+)(?>.+)?",3)
    If @error Then Exit MsgBox(0,"","No Match!")
    _ArraySplit($aData,4)
    _ArrayDisplay($aData)

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

    Func _ArraySplit(ByRef $aArray, $iCol)
    Local $iUB = Ceiling(UBound($aArray) / $iCol)
    If $iUB < 1 Then Return
    Local $aRet[$iUB][$iCol], $iC, $iUB2 = UBound($aArray)
    For $i = 0 To UBound($aArray) - 1 Step $iCol
    For $j = 0 To $iCol - 1
    If $i + $j >= $iUB2 Then ExitLoop
    $aRet[$iC][$j] = $aArray[$i + $j]
    Next
    $iC += 1
    Next
    $aArray = $aRet
    EndFunc ;==>_ArraySplit

    [/autoit]
    [autoit]

    StringRegExp($sText,"(\S+)\s+(\Q" & "HOST13521" & "\E)\s+(\S+)\s+(\S+\s+\S+)(?>.+)?",3)

    [/autoit]

    Könnte für die anderen Scripte interessant sein. HOST13521 muss dabei natürlich durch ne Variable ersetzt werden