Array Lese Problem

  • Guten Morgen zusammen,

    ich brauche nochmal Beistand mit diesen Arrays!
    Ich fasse mich auch ganz kurz:

    _ArrayDisplay($aResults)
    zeigt alles prima an:
    autoit.de/wcf/attachment/13126/

    Wenn ich diese Zeilen, Spalten...lesen will, dann klappt das nicht!

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

    For $i = 1 To UBound($aResults[0])
    MsgBox(0,"Meine Zelle ist:",$aResults[1][2])
    next

    [/autoit]


    Die Fehlermeldung lautet

    Spoiler anzeigen


    Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    For $i = 1 To UBound($aResults[0])
    For $i = 1 To UBound(^ ERROR


    Grüße
    Ilse ;)

  • 1. Ubound() wird eine Array übergeben.
    Du übergibst jedoch $aResults[0].
    In AutoIt bei einem 2D-Array ist sowas undefiniert.

    2. Selbst wenn du das mit Ubound richtig implementiert hättest würde es eine Fehlermeldung geben.
    Du beginnst die Schleife bei 1.
    Das 1. Arrayelement ist jedoch bei [0].
    Ein korrektes Ubound($aResults) würde den Wert 4 liefern.
    $aResults geht aber nur bis $aResults[3] (es fängt ja bei 0 an zu zählen statt bei 1).
    Daher würdest du ein Element zu weit gehen.

    3. Lies dir erstmal das Array-Tutorial durch und verstehe bevor du einfach wild rumprobierst ohne wirklich zu wissen was das alles zu bedeuten hat.

  • Och Mensch Ilse... den selben Fehler haste jetzt wieoft schon gemacht?

    [autoit]


    $array ; Variable eines Arrays das viele Elemente enthalten kann
    $array[] ; Element eines Arrays das einen Wert enthält

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

    ; Was macht ubound? Es schaut wieviele Elemente ein Array hat. Was übergibt man an ubound also? Kein Element sondern die Variable.

    [/autoit]

    Am besten nen großen Zettel an den Monitor pappen wenn du dir das einfach nicht merken kannst.

  • @ alle

    habt alle etwas Nachsehen mit mir.

    Sobald ich Arrays in meinem Code habe
    fange ich immer tierisch an zu schwimmen. :S

    Manche Sachen kann ich mir wirklich nicht merken.
    Aber versprochen:
    Ich arbeite täglich daran.

    Liebe Grüße
    Ilse ;)

  • Hallo,

    ich melde mich heute ganz ganz ungerne,
    weil es mal wieder um die Arrays geht!
    Ich probiere schon den ganzen Morgen....!

    Hab't Erbarmen!

    Dann denkt man, man hat es etwas verstanden
    aber es klappt einfach nicht!
    Array Display sieht aus wie oben in dem
    Beispiel, allerdings mit einer Spalte! (Row + Column)

    Hier mein Code

    [autoit]


    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>

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

    For $i = 0 to UBound($aRecords) - 1 ; ich fange bei 0 an und zähle....

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


    if StringInStr($aRecords[$i],'>Hunde<') Then ; ich suche nach dem Wort im Text
    $search = _StringBetween($aRecords[$i],'value','<') ; Wenn gefunden dann zeige den Wert dazwischen...
    _ArrayDisplay($search) ; bis hierhin schaffe ich es! (das Ergebnis ist ok)

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

    If IsArray($search) Then ; nun möchte ich die Werte der Spalte in eine Ini Schreiben
    MsgBox(0,"",$search[$i][0]) ; hier sollte also Col0 nacheinander angezeigt werden!
    endif

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

    endif

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

    Next
    MsgBox(0,"","Fertig")

    [/autoit]

    _ArrayDisplay zeigt Row + Column 0 an!
    ROW beginnt bei 0

    Liebe Grüße
    Ilse :huh:

  • So wie ich es jetzt ohne zu testen sehe, kanne s nicht klappen da die For Schleife zu Ubound( $aRecords) -1 geht, und $aRecords nichtmal deklariert wurde...

  • Die Array Erstellung hat uns Ilse nur unterschlagen @ BadBunny.
    Der Fehler liegt vielmehr darin, dass Stringbetween ein 1-Dimensionales Array zurückgibt und du in deiner Msgbox 2 Dimensionen verwendest... kann nicht funktionieren.

  • @ BudBunny
    Dim $aRecords ist drin!

    hatte ich vergessen, sorry!

    [autoit]


    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords
    For $i = 0 to UBound($aRecords) - 1 ; ich fange bei 0 an und zähle....

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


    if StringInStr($aRecords[$i],'>Hunde<') Then ; ich suche nach dem Wort im Text
    $search = _StringBetween($aRecords[$i],'value','<') ; Wenn gefunden dann zeige den Wert dazwischen...
    _ArrayDisplay($search) ; bis hierhin schaffe ich es! (das Ergebnis ist ok)

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

    If IsArray($search) Then ; nun möchte ich die Werte der Spalte in eine Ini Schreiben
    MsgBox(0,"",$search[$i][0]) ; hier sollte also Col0 nacheinander angezeigt werden!
    endif

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

    endif

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

    Next
    MsgBox(0,"","Fertig")

    [/autoit]

    misterspeed,

    heißt das, ich muß bei StringBetween 2 Dimensionen zurückgeben?

    [autoit]


    $search = _StringBetween($aRecords[$i][0],'value','<')

    [/autoit]

    das geht aber auch nicht!

    Bleibe ich in der 1. Dimension, dann wird nur eine Msgbox gezeigt.
    Ich kann die Msgbox im Loop nicht verwenden!
    Wie du mir erklärt hast zeigt
    Habe schon zig Varianten durch.

    Das passiert mit der Msgbox:

    [autoit]


    MsgBox(0,"",$search[0])

    [/autoit]


    zeigt 1 Array an und Loop wird anschließend beendet!
    OK!
    Aber so wird abgebrochen

    [autoit]


    MsgBox(0,"",$search[$i])

    [/autoit]

    Grüße
    Ilse :huh:

  • Lass dir doch mal $i ausgeben, ich denke es kommt ein Fehler weil die ArrayDimensionsanzahl überschritten wurde.

    • Offizieller Beitrag

    Wie willst du überhaupt einen Loop machen, wenn $aRecords keinen Inhalt hat?
    StringBetween liefert dir ein 1D Array zurück und kein 2D, nur mal zur Info.

    Zitat

    Bleibe ich in der 1. Dimension, dann wird nur eine Msgbox gezeigt.


    Das ist klar, weil Ubound ($aRecords) 0 ergibt.

    Edit: Ich habe dich schon mal drauf hingewiesen, das du deinen ganzen Code posten sollst, dann kann man dir auch helfen.
    Dein Code aus dem letzten Post ist bestimmt nicht der ganze Code, wenn doch, dann kann dein Vorhaben nie gelingen.

  • Hallo Raupi,

    ...dachte das genügt.
    Ich habe hier mal noch eine Variante
    mit den Arrays:
    1. Der Text wird gespeichert.
    2. Dann wird alles in das Array geschrieben
    3. Dann sollte ausgelesen werden und eine ini angelegt werden.

    Mein Alptraum heute: ?(

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

    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords
    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

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

    If Not _FileReadToArray("hunde.htm",$aRecords) Then
    MsgBox(4096,"Error", " Error:" & @error)
    Exit
    EndIf
    For $i = 1 to UBound($aRecords) - 1

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

    ;MsgBox(0,"",$aRecords[$i])

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

    if StringInStr($aRecords[$i],"hunde") Then

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

    $search = _StringBetween($aRecords[$i],"href",".de")
    _ArrayDisplay($search)

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

    If IsArray($search) Then
    ;Werte in ini schreiben
    ;MsgBox(0,"",$search[$i])
    endif

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

    endif

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

    Next
    MsgBox(0,"","Ini wurde angelegt")

    [/autoit]

    Grüße
    Ilse ;)

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords
    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

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

    If Not _FileReadToArray("hunde.htm", $aRecords) Then
    MsgBox(4096, "Error", " Error:" & @error)
    Exit
    EndIf
    For $i = 1 To $aRecords[0]
    ;~ MsgBox(0,"",$aRecords[$i])
    If StringInStr($aRecords[$i], "hunde") Then
    $search = _StringBetween($aRecords[$i], "href", ".de"); Suchstring scheint falsch zu sein, es wird nicht die ULR ausgegeben
    ;~ _ArrayDisplay($search)
    If IsArray($search) Then
    ;Werte in ini schreiben
    MsgBox(0, "", $search[0]); $i ist falsch weil es sich auf $aRecords bezieht !!!! Das 1. Suchergebnis von _StringBetween ist 0
    EndIf
    EndIf
    Next
    MsgBox(0, "", "Ini wurde angelegt")

    [/autoit]

    Schau dir die Kommentare an.

  • Hallo Raupi,

    die Suchstrings sind als Beispiel gedacht.
    Aber wieso zeigt ArrayDisplay nur einen Eintrag?

    Wie kann man alle Suchergebnisse (die gefiltert wurden) im Array anzeigen?
    mehrere Zeilen...


    Grüße
    Ilse :huh:

    • Offizieller Beitrag
    Zitat

    die Suchstrings sind als Beispiel gedacht.
    Aber wieso zeigt ArrayDisplay nur einen Eintrag?

    Weil du Zeile für Zeile durchsuchst.
    Wenn in einer Zeile nur 1 Treffer gefunden wird, dann ist logischerweise auch nur 1 Suchergebnis da.
    Wenn du alle Treffer haben willst, mußt du die Suchergebnisse in einem Array speichern.

    Edit, hier ein Beispiel, wie alle Funde in ein Array verfrachtet werden.

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords

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

    Global $Found[1]; Array für spätere Fundee

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

    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

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

    If Not _FileReadToArray("hunde.htm", $aRecords) Then
    MsgBox(4096, "Error", " Error:" & @error)
    Exit
    EndIf

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

    For $i = 1 To $aRecords[0]
    If StringInStr($aRecords[$i], "hunde") Then
    $search = _StringBetween($aRecords[$i], "href", ".de"); Suchstring scheint falsch zu sein, es wird nicht die ULR ausgegeben
    If IsArray($search) Then ; Url wurde gefunden
    For $i = 0 To UBound($search) - 1; Schleife um die Funde pro Zeile auszuwerten
    ReDim $Found[UBound($Found) + 1]; Größe des Arrays um 1 erhöhen
    $Found[UBound($Found) - 1] = $search[0] ;Fund ins letzte Arrayelement schreiben. Ubound -1 weil ein Array bei 0 anfängt zu zählen
    Next
    EndIf
    EndIf
    Next
    $Found[0] = UBound($Found) - 1 ; Anzahl der Funde in Index 0 schreiben
    _ArrayDisplay($Found, "Funde")
    ;Hier muß der Teil hin, welches in die Ini schreibt.

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

    MsgBox(0, "", "Ini wurde angelegt")

    [/autoit]

    Ps: Die Seite ist für en Popo, die funzt gerade mal, wann Sie will.

  • He Raupi,

    dein Code klappt irgendwie nicht!

    Spoiler anzeigen


    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords

    Global $Found[1]; Array für spätere Fundee

    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

    If Not _FileReadToArray("hunde.htm", $aRecords) Then
    MsgBox(4096, "Error", " Error:" & @error)
    Exit
    EndIf

    For $i = 1 To $aRecords[0]
    If StringInStr($aRecords[$i], "hunde") Then
    $search = _StringBetween($aRecords[$i], "href", ".de"); Suchstring scheint falsch zu sein, es wird nicht die ULR ausgegeben
    If IsArray($search) Then ; Url wurde gefunden
    For $i = 0 To UBound($search) - 1; Schleife um die Funde pro Zeile auszuwerten
    ReDim $Found[UBound($Found) + 1]; Größe des Arrays um 1 erhöhen
    $Found[UBound($Found) - 1] = $search[0] ;Fund ins letzte Arrayelement schreiben. Ubound -1 weil ein Array bei 0 anfängt zu zählen
    Next
    EndIf
    EndIf
    Next
    $Found[0] = UBound($Found) - 1 ; Anzahl der Funde in Index 0 schreiben
    _ArrayDisplay($Found, "Funde")
    ;Hier muß der Teil hin, welches in die Ini schreibt.

    MsgBox(0, "", "Ini wurde angelegt")

    Ich probiere mal auf anderen Seiten
    und seh mir mal dein Werk näher an. Danke!


    :huh: Ilse

    Einmal editiert, zuletzt von Ilse (21. April 2011 um 16:59)

    • Offizieller Beitrag

    Schau dir mein Beispiel an.

    [autoit]

    _ArrayAdd($search[0],$aSuche)

    [/autoit]


    Da benutz du genau die falsche Reihenfolge, schau dir mal die Parameter in der Hilfe an. :!:

    Edit, ich finde es nicht richtig das du deinen Code nachträglich änderst, damit sieht meine Antwort aus, als ob ich net lesen könnte.
    Das ist ein komplett anderer Code als vorher, nämlich meiner.
    Ich frag mich auch warum du die Formatierung entfert hast, so ist der Code bescheuert zu lesen und AutoitCodetags benutzt du auch nicht. :thumbdown:

    Edit2: Mein Code klappt nicht, weil deine Seite nicht gedownloadet wird.

    Edit3: Der Fehler in meinem Code war, das ich $i doppelt benutzt habe.

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords

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

    Global $Found[1]; Array für spätere Fundee

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

    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

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

    If Not _FileReadToArray("hunde.htm", $aRecords) Then
    MsgBox(4096, "Error", " Error:" & @error)
    Exit
    EndIf
    For $i = 1 To ubound($aRecords) -1
    If StringInStr($aRecords[$i], "hunde") Then
    Local $search = _StringBetween($aRecords[$i], "href", ".de"); Suchstring scheint falsch zu sein, es wird nicht die ULR ausgegeben
    If IsArray($search) Then ; Url wurde gefunden
    ;~ _arraydisplay ($search)
    For $j = 0 To UBound($search) - 1; Schleife um die Funde pro Zeile auszuwerten
    ReDim $Found[UBound($Found) + 1]; Größe des Arrays um 1 erhöhen
    $Found[UBound($Found) - 1] = $search[$j] ;Fund ins letzte Arrayelement schreiben. Ubound -1 weil ein Array bei 0 anfängt zu zählen
    ConsoleWrite($search[$j] & @CRLF)
    Next
    EndIf
    EndIf
    Next
    $Found[0] = UBound($Found) - 1 ; Anzahl der Funde in Index 0 schreiben
    _ArrayDisplay($Found, "Funde")
    ;Hier muß der Teil hin, welches in die Ini schreibt.

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

    MsgBox(0, "", "Ini wurde angelegt")

    [/autoit]
  • He Raupi,

    ich habe deinen Code (Spoiler)
    einfach in Scite kopiert und probiert, ging nicht!
    Dann habe ich ihn wieder kopiert, einen Spoiler gemacht
    und ...ups die Formatierung war weg.
    Also keine Absicht. :thumbdown:

    Ich habe aber auch alles mit anderen Websites probiert, passiert leider nichts!

    Es ist kein Download mehr da!

    :( Grüße
    Ilse

    • Offizieller Beitrag

    Habe $i doppelt verwendet, das geht nicht. Dummer Fehler.
    Hab ich erst jetzt gemerkt, weil die Seite bei mir zum größten Teil überhaupt nicht geht. Ewiges laden und InetGet funzt deshalb nicht.

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords

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

    Global $Found[1]; Array für spätere Fundee

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

    InetGet("http://www.hunde.de/kleinanzeigen/index.html", @ScriptDir & "\hunde.htm", 1)

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

    If Not _FileReadToArray("hunde.htm", $aRecords) Then
    MsgBox(4096, "Error", " Error:" & @error)
    Exit
    EndIf
    For $i = 1 To ubound($aRecords) -1
    If StringInStr($aRecords[$i], "hunde") Then
    Local $search = _StringBetween($aRecords[$i], "href", ".de"); Suchstring scheint falsch zu sein, es wird nicht die ULR ausgegeben
    If IsArray($search) Then ; Url wurde gefunden
    ;~ _arraydisplay ($search)
    For $j = 0 To UBound($search) - 1; Schleife um die Funde pro Zeile auszuwerten
    ReDim $Found[UBound($Found) + 1]; Größe des Arrays um 1 erhöhen
    $Found[UBound($Found) - 1] = $search[$j] ;Fund ins letzte Arrayelement schreiben. Ubound -1 weil ein Array bei 0 anfängt zu zählen
    ConsoleWrite($search[$j] & @CRLF)
    Next
    EndIf
    EndIf
    Next
    $Found[0] = UBound($Found) - 1 ; Anzahl der Funde in Index 0 schreiben
    _ArrayDisplay($Found, "Funde")
    ;Hier muß der Teil hin, welches in die Ini schreibt.

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

    MsgBox(0, "", "Ini wurde angelegt")

    [/autoit]
  • He Raupi,

    Dank dir. :thumbup:
    Ich muß jetzt leider wieder los.
    Wenn ich heute Abend zurück bin, werde ich mir mal dein Werk genauer ansehen.

    Bin jetzt ehrlich geschafft....!

    Liebe Grüße
    Ilse ;)