Mehrer Variablen überprüfen und ein string in einer ini speichern

  • Hi ich habe ein kleins problem und weis momentan nicht wie ich das am besten lösen soll. Ich hoffe ihr könt mir weiter helfen. also ich habe verschieden variablen bestehend aus $Checkbox,$Slider und $Combo. dies alls wird schon in einer ini gespeicher um es im anschluss wen das gui neugestartet wird automatisch wieder eingetragen wird. nun kommt mein problem ich muss den inhalt der variablen über prüfen und dann im anschlus alles in einem string in der ini speichern.

    Z.B. $checkbox1 = 1 $checkbox2= 4 $checkbox3 = 4 $checkbox4= 1

    Wenn in $checkbox1 = 1 ist dan soll er /a on; schreiben ist aber eine 4 soll er nichts machen und weiter abfragen
    Wenn in $checkbox2 = 1 ist dan soll er /b on; schreiben ist aber eine 4 soll er nichts machen und weiter abfragen
    Wenn in $checkbox3 = 1 ist dan soll er /c on; schreiben ist aber eine 4 soll er nichts machen und weiter abfragen
    Wenn in $checkbox4 = 1 ist dan soll er /d on; schreiben ist aber eine 4 soll er nichts machen und weiter abfragen

    dan wörde bei der in der ini stehen [Z.B.] Command=/a on;/d on

    ich hoffe ich konte mein problem eingermasen gut erklären und hoffe das ich schnelle hilfe bekomme. danke im voraus.

    Einmal editiert, zuletzt von Evoli_66 (11. Januar 2009 um 11:10)

  • ok da hätte ich auch drauf kommen können danke. lol

    Aber wie bekomme ich dann die filterung hin und das er jede variable mit ; trent?
    Wie gesagt es sind ja check boxen und es sollen ja nur die boxen eingetragen werden die Akteviert sind.

  • was für eine Filterung?
    Und das er den $ teilt, is ganz einfach!

    Hier:

    [autoit]


    $1 = "1"
    $2 = "2"
    $3 = "3"
    $Alle = $1 & ";" & $2 & ";" & $3
    $AlleGetrent = StringSplit ($Alle,";")
    MsgBox (0,"",$AlleGetrent[1] & "," & $AlleGetrent[2] & "," & $AlleGetrent[3]

    [/autoit]

    mfg. Jam00

  • Also ich habe mal ein beispiel gemacht von dem was ich vorhabe.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Form1 = GUICreate("Dies ist ein Beispiel", 281, 447, 193, 125)
    $Label1 = GUICtrlCreateLabel("Dies ist ein Beispiel", 80, 32, 141, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "Century Gothic")
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 13, 13)
    $Label2 = GUICtrlCreateLabel("Test /a on", 128, 64, 54, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 96, 96, 13, 13)
    $Label3 = GUICtrlCreateLabel("Test /b on", 128, 96, 54, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 96, 128, 13, 13)
    $Label4 = GUICtrlCreateLabel("Test /c on", 128, 128, 54, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 96, 160, 13, 13)
    $Label5 = GUICtrlCreateLabel("Test /d on", 128, 160, 54, 17)
    $Slider1 = GUICtrlCreateSlider(120, 184, 70, 37)
    $Combo1 = GUICtrlCreateCombo("Deaktiviert", 80, 232, 145, 25)
    GUICtrlSetData(-1, "Test e|Test f|Test g")
    $Button1 = GUICtrlCreateButton("Speichern", 104, 280, 75, 25, 0)
    GUICtrlSetOnEvent ($Button1 , "Speichern")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Speichern ()
    $ok1 = GUICtrlRead ($Checkbox1)
    IniWrite ("c:\temp\Setup.ini", "Box", "1",$ok1)
    $ok2 = GUICtrlRead ($Checkbox2)
    IniWrite ("c:\temp\Setup.ini", "Box", "2",$ok2)
    $ok3 = GUICtrlRead ($Checkbox3)
    IniWrite ("c:\temp\Setup.ini", "Box", "3",$ok3)
    $ok4 = GUICtrlRead ($Checkbox4)
    IniWrite ("c:\temp\Setup.ini", "Box", "4",$ok4)
    $Slider1a = GUICtrlRead ($Slider1)
    IniWrite ("c:\temp\Setup.ini", "Slider", "1",$Slider1a)
    $Combo1a = GUICtrlRead ($Combo1)
    IniWrite ("c:\temp\Setup.ini", "Combo", "1",$Combo1a)
    EndFunc

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

    Func _ende ()
    Exit
    EndFunc

    [/autoit]

    und nun will ich wen ich auf speichern klicke das er erst die einstelungen speichert in der ini was er ja auch so macht aber ich möchte noch zusetzt lich einen ein trag in der ini machen wo er dann hin geht und nur das was ausgewehlt ist in einer zeile schreibt also wen box 1 und 3 aktiv ist das er dan nur von box 1 und 3 eintregt nicht 1 2 3 4. das sehe dan so aus IniWrite ("c:\temp\Setup.ini", "Box", "3",$ok1 & ";" & $ok3).

  • So bin ein bissel weiter gekommen habe jetzt auch nur noch ein ganz kleines problem aber erst mal der beiispiel code:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $1 , $2 = 1, $3 =50, $4 = 4, $5 = 50,$6 =1, $7 = 50, $string
    Dim $alle[8]

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

    $Form1 = GUICreate("Dies ist ein Beispiel", 281, 447, 193, 125)
    $Label1 = GUICtrlCreateLabel("Dies ist ein Beispiel", 80, 32, 141, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "Century Gothic")
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 13, 13)
    $Label2 = GUICtrlCreateLabel("Test /a on", 128, 64, 54, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 96, 96, 13, 13)
    $Label3 = GUICtrlCreateLabel("Test /b on", 128, 96, 54, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 96, 128, 13, 13)
    $Label4 = GUICtrlCreateLabel("Test /c on", 128, 128, 54, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 96, 160, 13, 13)
    $Label5 = GUICtrlCreateLabel("Test /d on", 128, 160, 54, 17)
    $Slider1 = GUICtrlCreateSlider(120, 184, 70, 37)
    $Combo1 = GUICtrlCreateCombo("Deaktiviert", 80, 232, 145, 25)
    GUICtrlSetData(-1, "Test e|Test f|Test g")
    $Button1 = GUICtrlCreateButton("Speichern", 104, 280, 75, 25, 0)
    GUICtrlSetOnEvent ($Button1 , "Speichern")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Speichern ()
    $ok1 = GUICtrlRead ($Checkbox1)
    IniWrite ("c:\temp\Setup.ini", "Box", "1",$ok1)
    $ok2 = GUICtrlRead ($Checkbox2)
    IniWrite ("c:\temp\Setup.ini", "Box", "2",$ok2)
    $ok3 = GUICtrlRead ($Checkbox3)
    IniWrite ("c:\temp\Setup.ini", "Box", "3",$ok3)
    $ok4 = GUICtrlRead ($Checkbox4)
    IniWrite ("c:\temp\Setup.ini", "Box", "4",$ok4)
    $Slider1a = GUICtrlRead ($Slider1)
    IniWrite ("c:\temp\Setup.ini", "Slider", "1",$Slider1a)
    $Combo1a = GUICtrlRead ($Combo1)
    IniWrite ("c:\temp\Setup.ini", "Combo", "1",$Combo1a)

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

    $ok1 = GUICtrlRead ($Checkbox1)
    $ok2 = GUICtrlRead ($Checkbox2)
    $ok3 = GUICtrlRead ($Checkbox3)
    $ok4 = GUICtrlRead ($Checkbox4)
    $Slider1a = GUICtrlRead ($Slider1)
    $Combo1a = GUICtrlRead ($Combo1)

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

    If $ok1 = 1 then $alle [1] = "/a on"
    If $ok2 = 1 then $alle [2] = "/b on"
    If $ok3 = 1 Then $alle [3] = "/c on"
    If $ok4 = 1 then $alle [4] = "/d on"
    If $ok4 = 1 Then $alle [5] = " " &$Slider1a

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

    For $i = 1 to UBound($alle) - 1
    $string = $string & $alle[$i]
    Next
    IniWrite ("c:\temp\Setup.ini", "User", "Command",$string)
    EndFunc

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

    Func _ende ()
    Exit
    EndFunc

    [/autoit]

    so hab mein problem mit dem filtern einfach mit einem array gelöst nur jetzt habe ich noch folgendes problem

    und zwa das problem das er vor jedem / ein ; machen soll aus nahme ist beim ersten / da mit das dann so aussid

    [User]
    Command=/b on;/d on 51

    Hoffe das ihr mir weiter helfen könnt.

    Einmal editiert, zuletzt von Evoli_66 (11. Januar 2009 um 09:52)

    • Offizieller Beitrag

    Hi,
    einfach in der Schleife, in der du das Array abarbeitest, das ';' anhängen und nach dem letzten Eintrag ein Zeichen abschneiden, da ja nun kein weiteres Element folgt:

    [autoit]

    For $i = 1 to UBound($alle) - 1
    $string = $string & $alle[$i] & ';'
    Next
    $string = StringTrimRight($string, 1)

    [/autoit]
  • hmmm also ich habs mal getestet und muss leider sagen das es noch nicht ganz das ziel ereicht.

    ergebnis von deinem vorschlag:

    [User]
    Command=/a on;;;/d on;37;;

    das Ziehl ist aber:

    [User]
    Command=/a on;/d on 37

    fals du es übersehen hast ich gebe jeder Checkbox eine feste zell entweder schreibt er was rein oder lest es leer.

  • OK das war jetzt schon richtig gut danke nur habe ich noch ein ganz ganz kleines problem

    ergebnes:

    [User]
    Command=/a on;/b on;/d on; 26

    Ziehl:

    [User]
    Command=/a on;/b on;/d on 26

    da ist ja noch der slider der seperat ein geht der darf natürlich nicht durch ein ; getrent werden des wegen meinte ich ja auch das er nur vor ein / machen soll. wenn du mir da noch ein tip geben kanst wie ich das hinbekomme bin ich wunsch los glücklich.

    • Offizieller Beitrag

    Hi,
    ich habe es mal kpl. überarbeitet und den Code dadurch reduziert. Du hattest ja die Checkboxen doppelt ausgelesen und für jeden Wert eine Variable ausgegeben, das ist aber nicht nötig. Schau es dir mal an:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $1 , $2 = 1, $3 =50, $4 = 4, $5 = 50,$6 =1, $7 = 50, $string
    Global $INI = "c:\temp\Setup.ini"

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

    $Form1 = GUICreate("Dies ist ein Beispiel", 281, 447, 193, 125)
    $Label1 = GUICtrlCreateLabel("Dies ist ein Beispiel", 80, 32, 141, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "Century Gothic")
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 13, 13)
    $Label2 = GUICtrlCreateLabel("Test /a on", 128, 64, 54, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 96, 96, 13, 13)
    $Label3 = GUICtrlCreateLabel("Test /b on", 128, 96, 54, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 96, 128, 13, 13)
    $Label4 = GUICtrlCreateLabel("Test /c on", 128, 128, 54, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 96, 160, 13, 13)
    $Label5 = GUICtrlCreateLabel("Test /d on", 128, 160, 54, 17)
    $Slider1 = GUICtrlCreateSlider(120, 184, 70, 37)
    $Combo1 = GUICtrlCreateCombo("Deaktiviert", 80, 232, 145, 25)
    GUICtrlSetData(-1, "Test e|Test f|Test g")
    $Button1 = GUICtrlCreateButton("Speichern", 104, 280, 75, 25, 0)
    GUICtrlSetOnEvent ($Button1 , "Speichern")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Speichern ()
    Local $read
    $string = ''
    $read = BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED)
    IniWrite($INI, "Box", "1", $read)
    If $read Then $string &= "/a on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED)
    IniWrite($INI, "Box", "2", $read)
    If $read Then $string &= "/b on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED)
    IniWrite($INI, "Box", "3", $read)
    If $read Then $string &= "/c on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED)
    IniWrite($INI, "Box", "4", $read)
    If $read Then $string &= "/d on" & ' '
    If StringRight($string, 1) = ';' Then $string = StringTrimRight($string, 1) & ' '
    $read = GUICtrlRead($Slider1)
    IniWrite($INI, "Slider", "1", $read)
    $string &= $read
    IniWrite ($INI, "User", "Command", $string)
    $read = GUICtrlRead($Combo1)
    IniWrite($INI, "Combo", "1", $read)
    EndFunc

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

    Func _ende ()
    Exit
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Du hast ja einmal einen INI-Eintrag allein für Slider und einmal fügst du den Slider Wert bei 'Command' an.
    Ich hab es jetzt mal so geändert, dass bei nicht markierter CB4 weder der Eintrag bei Slider noch bei Command erfolgt. Ist nur eine If-Abfrage, kannst du selber auch anpassen:

    Spoiler anzeigen
    [autoit]

    Func Speichern ()
    Local $read
    $string = ''
    $read = BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED)
    IniWrite($INI, "Box", "1", $read)
    If $read Then $string &= "/a on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED)
    IniWrite($INI, "Box", "2", $read)
    If $read Then $string &= "/b on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED)
    IniWrite($INI, "Box", "3", $read)
    If $read Then $string &= "/c on" & ';'
    $read = BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED)
    IniWrite($INI, "Box", "4", $read)
    If $read Then
    $string &= "/d on" & ' '
    $read = GUICtrlRead($Slider1)
    IniWrite($INI, "Slider", "1", $read)
    $string &= $read
    EndIf
    If StringRight($string, 1) = ';' Then $string = StringTrimRight($string, 1) & ' '
    IniWrite ($INI, "User", "Command", $string)
    $read = GUICtrlRead($Combo1)
    IniWrite($INI, "Combo", "1", $read)
    EndFunc

    [/autoit]