guictrsetdata aus Array aktualisieren

  • Hi,
    ich möchte eine Editfeld aktualisieren und erhalte

    Zitat


    array variable has incorrect number of subscripts


    als Fehlermeldung.
    Das Feld und die Aktualisierung:

    [autoit]


    $edit = GuiCtrlCreateEdit("hier rein kopieren", 10, 10, 350, 450)
    GUICtrlSetData($edit,$filter_on,@CRLF)

    [/autoit]

    Hat jemand eine Idee? In der msgbox funktioniert es noch.

  • ups in der Eile das falshe gepostet
    hier taucht der Fehler auf:
    $filter_on = _ArrayToString($filter_on,@CRLF)
    ein @tabs funktioniert so wird ein leeres Editfeld angezeigt

    Einmal editiert, zuletzt von sunghost (16. November 2007 um 17:02)

  • komplett geht es leider nicht aber das Array hole ich aus einer Datei:
    _FileReadToArray("temp.txt",$string_Array),
    wenn ich es mit _ArrayDisplay($filter_on,"gefiltert") anzeigen lasse, dann ist alles ok. Es sind ca. 150 Zeilen. die aber vorher aus dem Editfeld, es waren 180Zeilen, gefiltert werden. Vorher wird das Array ($filter_on) von einer anderen Func übergeben. Liegt das Problem evtl. dort?

    Einmal editiert, zuletzt von sunghost (16. November 2007 um 17:13)

  • Zitat

    Original von sunghost
    ups in der Eile das falshe gepostet
    hier taucht der Fehler auf:
    $filter_on = _ArrayToString($filter_on,@CRLF)
    ein @tabs funktioniert so wird ein leeres Editfeld angezeigt

    'In Wunderkugel guckt'
    Ohhh... Ahhh. Hmm interessant.
    Vielleicht hast du $filter_on vorher deklariert z.B. Local $filter_on[100] - hat mir meine Kugel nicht verraten ;)
    Dann kann die Variable maximal 100 Elemente aufnehmen.
    Da du ja sagst du musst circa 150 Elemente aufnehmen.
    Die Fehlermeldung

    Code
    array variable has incorrect number of subscripts


    deutet darauf hin das dein Array zu klein ist.

  • Danke für den Blick in die Kugel. Das war es nicht.
    Dann hilft wohl nur noch der Code :)

    Spoiler anzeigen
    [autoit]


    $filter_on = filter_openfile($string_content) ;Übergabe des Kontent
    GUICtrlSetData($edit,$filter_on) ;erneutes darstellen des Feldes

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

    Func filter_openfile($string_content)
    Local $filter = FileOpen("filter.txt", 0) ;öffnen der Datei im Lesemodus
    Local $aRecords
    Local $string_Array[1]

    _FileCreate("temp.txt")
    FileWrite("temp.txt",$string_content)
    FileClose("temp.txt")

    While 1
    $line = FileReadLine($filter) ;Filter Zeilenweise lesen
    If @error = -1 Then
    ExitLoop ;falls die Datei nicht eingelesen werden kann - ende
    EndIf

    $search = StringLower($line)

    _FileReadToArray("temp.txt",$string_Array)
    For $i = $string_Array[0] to 1 Step -1
    If StringInStr($string_Array[$i],$search) <>0 Then _ArrayDelete($string_Array,$i)
    Next
    _FileWriteFromArray("temp.txt",$string_Array,1)

    WEnd
    FileClose($filter)
    ;_FileReadToArray("temp.txt",$string_Array)
    _ArrayDisplay($string_Array,"test")
    $string = _ArrayToString($string_Array,@CRLF)
    return($string_Array)
    EndFunc

    [/autoit]


    _ArrayDisplay zeigt dies an:
    [0] = 149
    [1] = Programm bla bla
    [2] = Programm2 bla bla
    ...

    Edit BugFix: Spoiler gesetzt

    Einmal editiert, zuletzt von sunghost (19. November 2007 um 09:20)

    • Offizieller Beitrag

    Das hilft nicht wirklich, da die Zeile mit dem Fehler bisher nicht von dir gepostet wurde. Also nicht nur die Fehleraussage, sondern auch der Verweis auf die Fehlerursache (liefert SciTE doch wunderbar), also die 2 Zeilen unterhalb der Fehlermeldung.
    s. hier:

    Code
    C:\CODE\test.au3 (24) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: 
    If $ar[$i] = 3 Then _ArrayDelete($ar, $i) 
    If ^ ERROR
  • Zeile 32:
    Die Funktion _ArrayToString hat doch gar keinen Rückgabewert.

    Spoiler anzeigen


    Ab Position @CRLF soll in eine Zeichenfolge umgewandelt werden? Oder soll das mal das Trennzeichen werden?

  • sorry, diese Zeile sollte oben als 2. Folgen

    [autoit]


    $filter_on = _ArrayToString($filter_on,@CRLF)

    [/autoit]
  • Da keiner mehr antwortet, frage ich mal anders:
    Wie kann ich ein guictrledit aus einem Array, inkl. Zeilenumbruch, aktualisieren??

    Danke

  • Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    GUICreate("blub",300,185)
    $input = GUICtrlCreateEdit("",5,5,200,100)
    GUISetState(@SW_SHOW)

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

    Local $astring[100]

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

    For $i = 0 To 99
    $astring[$i]=Random(0,100)
    GUICtrlSetData($input,GUICtrlRead($input) & $astring[$i] & @CRLF)
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $gui_event_close )
    Exit
    EndSelect
    WEnd

    [/autoit]


    Ich hoffe ich hab dich richtig verstanden^^

    _FileWriteFromArray <> _ArrayToString
    Und _ArraytoString hat keinen Rückgabewert der via return erreicht wird.
    Das einzige was sich verändert bei _ArrayToString ist der 1. Parameter.
    Du kannst dir ja mal in einer MsgBox ausgeben lassen was deine Variable $string in Zeile 32 ist.

  • oh ja, die Var $string ist ein Test gewesen und ist hierbei momentan nicht von Relevanz. So ist das wenn man hin und her probiert ;)
    Dein BSP funktioniert. Darauf versuche ich auf zu bauen

    [autoit]


    GUICtrlSetData($edit,"")
    For $i = 0 to $filter_on[0]
    GUICtrlSetData($edit,GUICtrlRead($edit) & $filter_on[$i] & @CRLF)
    Next

    [/autoit]


    Leider kommt so immer noch die Array-Fehlermeldung. Wenn ich die Var Local $filter_on[100] setze, dann zeigt er nichts an<-logisch es sind dann auch keine Daten mehr vorhanden. Die Frage wie löse ich das? Vermutlich löst es auch mein ursprüngliches Problem.

    edit:
    das witzige, ich kann die Änderungen im editfeld noch sehen, wenn ich dann die fehlermeldung mit ok bestätige, dann wird auch das autoit fenster geschlossen.

    Einmal editiert, zuletzt von sunghost (19. November 2007 um 16:56)

  • mir ist aufgefallen, dass wenn ich "nur" 20 Zeilen anzeigen lasse, dass es dann zu keiner Fehlermeldung kommt. Außerdem zeigt er mir bei dieser Zeile:

    [autoit]


    For $i = 0 to $filter_on[0]
    GUICtrlSetData($edit,"["& $i &"]" & GUICtrlRead($edit) & $filter_on[$i] & @CRLF)
    Next

    [/autoit]


    folgendes an:

    Zitat


    [20][19][18][17][16][15][14][13][12][11][10][9][8][7][6][5][4][3][2][1][0]


    Ich war der Meinung das er es dann Zeilenweise ausgibt und nicht nacheinander. Erklärbar?