Koda Problem mit Arrays

  • Hallo,

    wenn man in KODA zahlreiche Inputfelder hat

    z.B.:

    Spoiler anzeigen


    $Input1 = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input2 = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input3 = GUICtrlCreateInput("Input3", 272, 80, 185, 21)...

    diese aber als Arrays darstellen muß
    dann geht das innherhalb von KODA nicht!
    Klar, man kann Sie von Hand in SCite ändern: $Input[1]

    Innerhalb von Koda kann man das aber so nicht angeben!
    Bei den Namen sind keine [ ] zuläsig!

    Jetzt aber das Problem:
    Wenn KODA aktualisiert wird, dann sind alle Arrays plötzlich weg!
    aus $Input[1] wird wieder $Input1...

    Wenn ich die Arrays außerhalb von KODA (in SCite nach der Koda-Region) benenne, geht es aber auch nicht:

    Spoiler anzeigen


    $Input1="$Input[1]"
    $Input2="$Input[2]"
    $Input3="$Input[3]"

    Habt Ihr eine Idee wie man dieses Problem lösen kann?

    Grüße
    Ilse

    Einmal editiert, zuletzt von Ilse (24. September 2010 um 16:17)

  • Dann erstell dir doch einfach selber eine GUI und benutz kein koda.
    Koda ist nur um ganz grob zu machen, am besten du schreibst es per hand, damit lernst du auch gleichzeitig was.

  • 1. Gewöhnt dir ab hinter jedem Satz ein Ausrufezeichen zu machen
    2. Koda ist dafür gedacht eine GUI zu machen. Sachen in einen Array zu speichern hat aber nichts mit der GUI zu tuen.

    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.

  • Benutze doch später, z.B. in der Abfrage-Schleife, einfach:

    [autoit]

    For $i = 1 to 3
    msgbox(0,"",GUICtrlRead(Eval("Input" & $i)))
    Next

    [/autoit]

    Sollte gehen, habs es aber nicht getestet.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Schreib doch, wie von Micha_he mit Eval() vorgeschlagen, nach der Koda-Sektion in deinem Script einfach einen "InputXX_nach_Array" - 5 Zeiler...

    [autoit]

    $i=0
    while isdeclared("Input"&$i)
    $array[$i]=eval("Input"&$i)
    $i=$i+1
    wend

    [/autoit]

    dann kannst du mit koda GUIs erstellen, und hast trotzdem deine arrays

  • Hallo zusammen
    und danke für all eure Tipps.

    Aber ich hab's so leider noch nicht zum Laufen gebracht!

    Spoiler anzeigen


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $Input[3]
    #region
    $Form1 = GUICreate("Form1", 517, 170, 303, 240)
    $MenuItem1 = GUICtrlCreateMenu("Datei")
    $men_open = GUICtrlCreateMenuItem("Öffnen", $MenuItem1)
    $men_save = GUICtrlCreateMenuItem("speichern", $MenuItem1)
    #cs
    $Input[0] = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input[1] = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input[2] = GUICtrlCreateInput("Input3", 272, 80, 185, 21)
    #ce

    $Input1 = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input2 = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input3 = GUICtrlCreateInput("Input3", 272, 80, 185, 21)


    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    $i=0
    while isdeclared("Input"&$i)
    $array[$i]=eval("Input"&$i)
    $i=$i+1
    wend

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $men_open
    $openini = FileOpenDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 1 + 4)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    $openini = StringReplace($openini, "|", @CRLF)

    For $i=0 to UBound($Input)-1
    $MeineIni = IniRead($openini, "Felder", $i, "NotFound")
    GUICtrlSetData($Input[$i],$MeineIni)
    msgbox(4096,$Input[$i],$MeineIni)
    $MeineIni = ""

    Next
    EndIf
    Case $men_save
    $saveini = FileSaveDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 16)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    For $i=0 To UBound($Input)-1
    IniWrite($saveini,"Felder",$i,GUICtrlRead($Input[$i]))
    Next
    EndIf
    EndSwitch
    WEnd

  • hups, mein Fehler^^
    man sollte auch die Scripte durchlesen...bzw wenigstens ab und zu mal Koda benutzen :rofl:

  • Und in den "Case"-Zweigen muss Du auch das richtige Array nutzen ! Oben $array, unten $Input.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ...mmh immer noch nicht!
    Habe mal beim Menüpunkt öffnen die arrays integriert!

    Spoiler anzeigen


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $Input[3]
    #region
    $Form1 = GUICreate("Form1", 517, 170, 303, 240)
    $MenuItem1 = GUICtrlCreateMenu("Datei")
    $men_open = GUICtrlCreateMenuItem("Öffnen", $MenuItem1)
    $men_save = GUICtrlCreateMenuItem("speichern", $MenuItem1)
    #cs
    $Input[0] = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input[1] = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input[2] = GUICtrlCreateInput("Input3", 272, 80, 185, 21)
    #ce

    $Input1 = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input2 = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input3 = GUICtrlCreateInput("Input3", 272, 80, 185, 21)


    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    $i=1
    while isdeclared("Input"&$i)
    $array[$i]=eval("Input"&$i)
    $i=$i+1
    wend

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $men_open
    $openini = FileOpenDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 1 + 4)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    $openini = StringReplace($openini, "|", @CRLF)

    For $i=0 to UBound($array)-1
    $MeineIni = IniRead($openini, "Felder", $i, "NotFound")
    GUICtrlSetData($array[$i],$MeineIni)
    msgbox(4096,$array[$i],$MeineIni)
    $MeineIni = ""

    Next
    EndIf
    Case $men_save
    $saveini = FileSaveDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 16)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    For $i=0 To UBound($Input)-1
    IniWrite($saveini,"Felder",$i,GUICtrlRead($Input[$i]))
    Next
    EndIf
    EndSwitch
    WEnd

  • Na da sind aber noch einige Fehler drin. Du hast auch nie erwähnt das das Script mit einem Fehler abbricht und dann auch mit welchem.

    Probiere es mal so, aber ohne Garantie, weil ich nicht weiß wie Deine INI aussieht.

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $array[1] ;<<< hier
    #region
    $Form1 = GUICreate("Form1", 517, 170, 303, 240)
    $MenuItem1 = GUICtrlCreateMenu("Datei")
    $men_open = GUICtrlCreateMenuItem("Öffnen", $MenuItem1)
    $men_save = GUICtrlCreateMenuItem("speichern", $MenuItem1)
    #cs
    $Input[0] = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input[1] = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input[2] = GUICtrlCreateInput("Input3", 272, 80, 185, 21)
    #ce

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

    $Input1 = GUICtrlCreateInput("Input1", 272, 16, 185, 21)
    $Input2 = GUICtrlCreateInput("Input2", 272, 48, 185, 21)
    $Input3 = GUICtrlCreateInput("Input3", 272, 80, 185, 21)

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

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $i=1
    while isdeclared("Input"&$i)
    ReDim $array[$i] ;<<< hier
    $array[$i - 1]=eval("Input"&$i) ;<<< hier
    $i=$i+1
    wend

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $men_open
    $openini = FileOpenDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 1 + 4)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    $openini = StringReplace($openini, "|", @CRLF)

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

    For $i=0 to UBound($array)-1
    $MeineIni = IniRead($openini, "Felder", $i, "NotFound")
    GUICtrlSetData($array[$i],$MeineIni)
    msgbox(4096,$array[$i],$MeineIni)
    $MeineIni = ""

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

    Next
    EndIf

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

    Case $men_save
    $saveini = FileSaveDialog("Bitte wählen Sie einen Katalog:", @ScriptDir & "\", "Einstellungen (*.ini;*.txt)", 16)
    If @error Then
    MsgBox(4096, "", "No File(s) chosen")
    Else
    For $i=0 To UBound($Input)-1
    IniWrite($saveini,"Felder",$i,GUICtrlRead($array[$i])) ;<<< hier
    Next
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    2 Mal editiert, zuletzt von Micha_he (23. September 2010 um 21:22)

  • @Micha,

    habe noch einen Fehler entdeckt, $Input ersetzt...
    jetzt klappt alles.

    Aber was ich am Code nicht verstehe:
    Global $array[1] ;<<< hier

    Wieso muß da [1] hin, es sind doch 3 Felder?

    @m_obi
    merci, hab ich mir nochmals angesehen
    deswegen versteh ich das Global $array irgendwie nicht!
    Dachte bei 10 Feldern $array[10]...

    Viele Grüße
    Ilse

  • Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $aInput[10] ; 10 = 10 Felder, du musst es nur hier ändern, den Rest macht der Code von alleine

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

    $hGui = GUICreate("Form1", 517, 370, 303, 240) ; und hier musst du natürlich die Höhe ändern damit man die Inputs auch sieht
    $hMenu1 = GUICtrlCreateMenu("Datei")
    $hMenu1Item1 = GUICtrlCreateMenuItem("Öffnen", $hMenu1)
    $hMenu1Item2 = GUICtrlCreateMenuItem("Speichern", $hMenu1)
    For $i = 0 To UBound($aInput) - 1
    $aInput[$i] = GUICtrlCreateInput("Input" & $i + 1, 272, 16 + 32 * $i, 185, 21)
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hMenu1Item1
    $sOpen = FileOpenDialog("Bitte wählen Sie einen Katalog:", @Scriptdir & "\", "Einstellungen (*.ini;*.txt)", 1, "", $hGui)
    If @error Then
    MsgBox(4096,"","No File(s) chosen")
    Else
    $aIniSection = IniReadSection($sOpen, "Felder")
    If Not @error Then
    For $i = 0 To UBound($aInput) - 1
    GUICtrlSetData($aInput[$i], $aIniSection[$i + 1][1])
    Next
    EndIf
    EndIf
    Case $hMenu1Item2
    EndSwitch
    WEnd

    [/autoit]
  • Hallo m_obi,

    merci, es klappt alles prima!

    Zitat

    Global $aInput[10] ; 10 = 10 Felder, du musst es nur hier ändern

    ja, das wußte ich
    nur Micha hat diesen Code

    Zitat

    Global $array[1] ;<<< hier

    obwohl mehrere Inputfelder angesprochen wurden.
    Und es geht trotzdem. Das habe ich nicht verstanden.

    Egal, es klappt.
    Ich bin schon den ganzen morgen an einer IF Abfrage am kämpfen.
    Wenn ich es in einer Stunde nicht hinkriege, dann melde ich mich wieder.

    Liebe Grüße
    Ilse ;)

  • @Micha,

    habe noch einen Fehler entdeckt, $Input ersetzt...
    jetzt klappt alles.

    Aber was ich am Code nicht verstehe:
    Global $array[1] ;<<< hier

    Wieso muß da [1] hin, es sind doch 3 Felder?

    Siehe Zeile 26 meines Beispiels --> ReDim $array.... (hier wird das Arrray an die wirkliche Anzahl von benutzen "$inputx" angepasst.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"