Array weiter verarbeiten ? lösungsansätze ?

  • Hallo Leutz,

    habe mir ein Script geschrieben welches via Broadcast eine Frage an alle Geräte im localen Netz sendet und auf die Antwort wartet. Soweit so gut. Die Antwort bekomme ich, nun habe ich folgendes problem. Die Antworten gehen in ein array. Nun möchte ich dieses weiter verarbeiten.

    Zur Veranschaulichung habe ich mal ein schnell ein script geschrieben welches genau dieses Array produziert.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']

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

    _ArrayDisplay($aArray)

    [/autoit]

    Als Beispiel habe ich zwei Geräte die Antworten, der kurze string ins eine Antwort von einem PC und der lange von einem Gerät. Die anzahl der PC's sowie Geräte kann aber varieren. Was ich nun weiter verarbeiten will ist die Invormation die immer in den Anführungszeihen stehen.

    Wie stelle ich das nun am geschicktesten an, diese information aus dem array aus zu lesen ? beispiele ?

    gruß

  • Hallo,

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <array.au3>

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

    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']

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

    _ArrayDisplay($aArray)

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

    $test=_stringbetween($aArray[1],'"','"')
    _ArrayDisplay($test)

    [/autoit]


    so?
    ciao
    Andy

  • Hier noch ne schnellere Variante:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']

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

    For $i = 1 To UBound($aArray)-1
    $test=StringRegExp($aArray[$i], '"(.*?)"', 3)
    _ArrayDisplay($test)
    Next

    [/autoit]
  • die idee hatte ich auch schon, ist aber nicht dynamisch, sondern statisch. da der fall eintreten kann das noch mehr geräte in dem array stehen können.

  • Hier noch ne schnellere Variante:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']

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

    For $i = 1 To UBound($aArray)-1
    $test=StringRegExp($aArray[$i], '"(.*?)"', 3)
    _ArrayDisplay($test)
    Next

    [/autoit]

    Ja nach sowas hatte ich gesucht, jedoch, wird jedes mal das array $test neu überschrieben, wenn die schleife fertig ist habe ich nur die informationen von dem letzten gerät im Array, kann man da nicht ein xD arry draus machen ? wenn ja wie ?

  • Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']
    Dim $nArray[UBound($aArray)]
    $nArray[0] = UBound($aArray) - 1

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

    For $i = 1 To $nArray[0]
    $nArray[$i] = StringRegExp($aArray[$i], '"(.*?)"', 3)
    Next

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

    For $i = 1 To $nArray[0]
    _ArrayDisplay($nArray[$i])
    Next

    [/autoit]
  • wow, ein array im array. und wie bekomme ich da nun die strings ausgelesen ?

  • Sorry, aber ich blicke nicht mehr durch....
    Was heißt denn statisch bzw dynamisch?
    Ist mittels einer for/to-Schleife ein Array auslesen "dynamisch"?

    [autoit]

    #include <String.au3>
    #include <array.au3>

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

    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']
    dim $testarray[ubound($aArray)]

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

    for $i=0 to ubound ($aArray)-1
    $testarray[$i]=_stringbetween($aArray[$i],'"','"')
    _ArrayDisplay($testarray[$i])
    next

    [/autoit]
  • Hey pretrojaner,
    sorry, mein erster Ansatz war nicht gut, das funktionierte garnicht. Habs bissal umgeschrieben:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $aArray[3] = [2, '<id serialno="A5BS11982" friendly="Alice5-A5BS11982" os="linux" soft="1.3.5" hostname="Alice5-A5BS11982" /><ip_list><ip_device name="eth0" ip="192.168.10.11" mask="255.255.255.0" up="1" macid="00:04:5F:86:7E:63" gateway="" /><ip_device name="eth1" ip="" mask="" up="0" macid="00:04:5F:86:7E:64" gateway="" /><ip_device name="irda0" ip="" mask="" up="1" macid="34:20:a3:6f " gateway="" /><ip_device name="ppp0" ip="" mask="" up="0" macid="" gateway="" /></ip_list>', '<id serialno="102" friendly="SleepwareHost" os="win32" soft="2.7.65" hostname="Alice1" />']
    Dim $nArray[UBound($aArray)], $sOld = 0
    For $i = 1 To UBound($aArray) - 1
    $sRegExpArray = StringRegExp($aArray[$i], '"(.*?)"', 3)
    If UBound($sRegExpArray) > $sOld Then ReDim $nArray[UBound($aArray)][UBound($sRegExpArray)]
    $nArray[$i][0] = UBound($sRegExpArray) - 1
    For $j = 1 To $nArray[$i][0]
    $nArray[$i][$j] = $sRegExpArray[$j]
    Next
    $sOld = UBound($sRegExpArray)
    Next
    _ArrayDisplay($nArray)
    MsgBox(0, "", $nArray[1][1])

    [/autoit]
    Zitat

    Sorry, aber ich blicke nicht mehr durch....
    Was heißt denn statisch bzw dynamisch?
    Ist mittels einer for/to-Schleife ein Array auslesen "dynamisch"?


    Dynamisch heißt, es soll auch funktionieren wenn ein Array mehr oder weniger Einträge hat. Das Script soll also nicht von einer festen Anzahl abhängig sein.