Ping aus CSV Datei

  • Hallo,
    seit einiger Zeit schreibe ich mit Autoit kleine Scripte für Privat und für die Arbeit. Derzeit bin ich dran ein PingTool zu schreiben.

    Vorhanden ist eine Datei mit der PC Zummer und die dazuhörige IP. Alles befindet sich in einer Exceltabelle. Mit der UDF von Excel ist es möglich ja die Datei im hintergrund laufen zulassen. Das ganze Script wird auf einen Server laufen, wo kein Excel drauf ist. Deswegen bin ich auf CSV datei umgesprungen.

    Ich habe schon seit wochen sämtliche Foren durch und finde keine Lösung.

    ping. csv (beispiele)

    1;10.125.212.2
    2;10.125.212.12
    3;10.125.212.3

    Ein Gui habe ich schon erstellt mit einem Feld wo die PC Nummer eingetragen werden kann.

    wie kann ich die CSV datei am besten auslesen. Angedacht wäre es so:

    Im gui die PC nummer eingeben, die IP wird aus der CSV gelesen und die IP wird angeping.Zudem gibt es dann noch Fehlder wo ich die dazugehörigen IP Drucker und den Router der sich dahinter befindet. Dies soll am Besten wieder als Tabelle im vorhandenden GUI angezeigt werden, Msgbox wäre natürlich auch suboptimal.

    ich stehe volles Rohr auf dem Schlauch.

    Das Buch habe ich gelesen, leider ist der Punkt mit dem Gui nicht geschrieben, da peethebee laut seinem Block zurzeit keine zeit hat.


    Hat jemand einen Ansatz für mich? Leider habe ich das Script auf der Arbeit liegen sonst würde ich es per Anhang beifügen.


    Lg Schickedim

    2 Mal editiert, zuletzt von Schickedim (26. Februar 2012 um 18:34) aus folgendem Grund: GELÖST :-)

  • Hallo Schickedim,

    du loest am besten mit

    [autoit]

    _FileReadToArray

    [/autoit]

    deine Datei in ein Array. Dieses Array gehst du dann Zeile für Zeile durch. Mit

    [autoit]

    StringSplit

    [/autoit]

    kannst du die einzeln Zeilen dabei wiederum in ein Array spliten. Mit dem entsprechenden Feld (der IP) führst du danach einen

    [autoit]

    Ping

    [/autoit]

    aus,

    mfg autoBert

  • Guten Morgen.

    Erstmal Danke. Ich habe vergessen zuerwähnen, dass es etwa 3300 ips sind. und die gehen nicht von 1 bis x durch z.b. fehlt da 1-10 geht weiter mit 11 dann irrgentwann man mit 222 bis 9999. Ist es trotzdem möglich mit SplitArray nach dem ersten Parameter zu durchsuchen, weil ja nicht PC1 Zeile 1 enspricht.

    Hi Oynama Schickidim Schickidim,

    vielleicht kannst du hieraus was gebrauchen: Check Online Status v0.97 Build 2011-11-27 Beta

    Gruß,
    UEZ

    PS: Tarkan lässt Grüßen ;)

    Hallöle.
    ich verstehe in der au3 nur spanisch :D

    Grüße zurück :D http://www.youtube.com/watch?v=f9yqn8gVnII


    Als anhang befindet sich die Beispiel Datei. Möglich mir ein beispiel zugeben?

  • Hallo Schickedim,

    ja natürlich:

    Zitat

    StringSplit

    Teilt einen String, abhängig von den/dem gewählten Trennzeichen (delimiters), in Stringfolgen auf und gibt diese in einem Array zurück
    Quelle: dt. Hilfe

    [autoit]

    #include <Array.au3>
    dim $aIpLines[4]

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

    $aIpLines[1]="1;10.125.212.2"
    $aIpLines[2]="5;10.125.212.12"
    $aIpLines[3]="4;10.125.212.3"
    $aIpLines[0]=3
    _ArrayDisplay($aIpLines,"So sieht dein Array nach Einlesen aus")

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

    for $i= 1 to $aIpLines[0]
    $aSplit = StringSplit($aIpLines[$i],";")
    _ArrayDisplay($aSplit,"So sueht das Split-Array für das " & $i & " Element von $aIPLines aus")
    ConsoleWrite("Computer: " & $aSplit[1] & " hat die IP: " & $aSplit[2] & @CRLF)
    Next

    [/autoit]

    mfg autoBert

  • Meinst das vielleicht so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    Dim $ips
    _FileReadToArray("ip.csv", $ips)

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

    $pcnummer = InputBox("Ping", "PC-Nummer eingeben:")
    $index = _ArraySearch($ips, $pcnummer & ";", 1, 0, 0, 1)
    If @error Then
    MsgBox(0, "Ping", "PC ist nicht in der IP-Liste")
    Else
    $ip = StringSplit($ips[$index], ";", 2)
    $ping = Ping($ips[$index])
    If @error = 0 Then
    MsgBox(0, "Ping", "Der PC hat in " & $ping & " Millisekunden geantwortet.")
    Else
    MsgBox(0, "Ping", "PC antwortet nicht.")
    EndIf
    EndIf

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Vielen dank.
    So in etwa meinte ich das! Muss das nur noch bisschen umstellen bis das hinhaut. Derzeit bekomme ich noch ein paar fehler Meldungen. Falls ichs nicht hinbekomme, werde ich mich melden.


    €dit:
    Ich habe soweit jetzt fast alles fertig. Aber etwas funktioniert nicht.

    Spoiler anzeigen
    [autoit]


    ; bin mir nie sicher welche au3 ich brauche.
    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <Misc.au3>
    #Include <File.au3>
    #include <String.au3>
    #include <Array.au3>

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

    dim $ips
    if Not _FileReadToArray("ips.csv", $ips) Then
    MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei in das Array!" & @CRLF & "Fehlercode: " & @error)
    Exit
    EndIf

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

    GUICreate("Filiale Ping", 764, 93, 194, 288)
    $flnr = GUICtrlCreateInput("", 112, 48, 97, 21)
    GUICtrlSetLimit(-1, 4)
    $router = GUICtrlCreateButton("Cisco Router", 0, 0, 89, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $router
    _router ()
    EndSwitch
    WEnd

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

    Func _router ()

    $index = _ArraySearch($ips, GUICtrlRead($flnr) & ";", 1, 0, 0, 1)
    If @error Then
    MsgBox(0, "Ping", "Filiale nicht vorhanden")
    Else
    $ip = StringSplit($ips[$index], ";", 2)
    Ping($ips[$index]&".130", 250)
    If @error = 0 Then
    MsgBox(0, "Ping","Cisco Router ist Online.") ;"Cisco Router ist Online.")
    Else
    MsgBox(0, "Ping", "Cisco Router ist Offline.")
    EndIf
    EndIf
    EndFunc

    [/autoit]


    ips.cvs
    Filiale; IP
    12;10.199.250
    15;10.199.252
    20;10.199.255


    Der Router ist immer Offline und wenn ich kein Parametter eingebe bzw eine falsche, nicht vorhandende Filial nummer. Die Abfrage Filiale

    Da es sich um einen Kunden hält sind das hier beispiel daten.

    4 Mal editiert, zuletzt von Schickedim (22. Februar 2012 um 12:02)