Werte in INI Datei ändern?

  • Hallo Leutz,

    habe eine INI in der ich 2 Werte ändern möchte. Die INI schaut ungefähr so aus...

    Code
    [SektionsName1]
    Schlüssel1=abc
    
    
    [SektionsName2]
    Schlüssel2=abc

    Geändert werden soll der Wert abc in xyz, wie zu sehen sind aber die Sektionsnamen und Schlüssel unterschiedlich. So habe ich angefangen und konnte den Wert bei Schlüssel1 ändern.

    [autoit]


    Global $iniPath = '@ScriptDir & "\meine.ini"'

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

    If IniRead ($iniPath, "SektionsName1", "schlüssel1", "abc") <> "abc" Then
    IniWrite ($iniPath, "SektionsName1", "schlüssel1", "xyz")
    Else
    ;ab hier komme ich nicht so recht weiter :(

    [/autoit]


    Was kann ich als Else machen wenn der Wert schon xyz (MsgBox + Exit?) ist oder ein unerwarteter Wert wie z.B. LMN an dieser Stelle steht und der dann auf gar keinen Fall geändert werden soll? Hab auch noch nicht rausbekommen, wie ich den Wert bei SektionsName2/Schlüssel2 auf xyz bekomme ?( auch hier könnte ein unerwarteter Wert stehen. Danke schonmal fürs lesen :thumbup:

    • Offizieller Beitrag

    Schau dir das an:

    [autoit]

    Global $iniPath = '@ScriptDir & "\meine.ini"'

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

    $ini1 = IniRead ($iniPath, "SektionsName1", "schlüssel1", "Not Found")

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

    If $ini1 = "abc" Then
    IniWrite ($iniPath, "SektionsName1", "schlüssel1", "xyz")
    ElseIf $ini1 = "xyz" Then
    MsgBox(0,"Info","Wert ist bereits gesetzt")
    Exit
    Else
    MsgBox(0,"Info","Schlüssel existiert nicht oder unerwarteter Wert")
    Exit
    EndIf

    [/autoit]


    Dein Problem mit dem 2. Schlüssel verstehe ich nicht. Wird doch genauso gemacht wie beim 1. Oder willst du nur ändern wenn beide Schlüssel "abc" sind?

    Und mal so als Anmerkung, du bist knapp ein halbes Jahr dabei und kannst keine simple If ElseIf Else Abfrage? Ich empfehle dir mal die
    Grundlagen zu lernen ;)

  • Varriante 1
    [autoit]


    Local Const $sPath = @ScriptDir & "\Meine.ini"

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

    If IniRead ($sPath, "SektionsName1", "schlüssel1", "abc") = "abc" Then ; Wenn der Wert "abc" ist wird er mit xyz überschrieben

    IniWrite ($sPath, "SektionsName1", "schlüssel1", "xyz")

    If IniRead ($sPath, "SektionsName1", "schlüssel1", "Test") = "Test" Then ; Ein kleiner Test ob der Schlüssel wirklich exestiert
    MsgBox(0,"SektionsName1","Der schlüssel1 wurde mit dem Inhalt 'xyz' erstellt")
    else
    MsgBox(0,"SektionsName1","Der Inhalt von schlüssel1 wurde mit 'xyz' überschrieben")
    EndIf

    ElseIf IniRead ($sPath, "SektionsName1", "schlüssel1", "abc") = "xyz" Then
    MsgBox(16,"SektionsName1", "Der wert von 'schlüssel1' ist schon 'xyz' und wird nicht überschrieben.")
    Else
    MsgBox(16,"SektionsName1", "Der wert von 'schlüssel1' ist nicht 'abc' und wird nicht überschrieben.")
    EndIf

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

    If IniRead ($sPath, "SektionsName2", "schlüssel2", "abc") = "abc" Then ; Wenn der Wert "abc" ist wird er mit xyz überschrieben

    IniWrite ($sPath, "SektionsName2", "schlüssel2", "xyz")

    If IniRead ($sPath, "SektionsName2", "schlüssel2", "Test") = "Test" Then ; Ein kleiner Test ob der Schlüssel wirklich exestiert
    MsgBox(0,"SektionsName2","Der schlüssel2 wurde mit dem Inhalt 'xyz' erstellt")
    else
    MsgBox(0,"SektionsName2","Der Inhalt von schlüssel2 wurde mit 'xyz' überschrieben")
    EndIf

    ElseIf IniRead ($sPath, "SektionsName2", "schlüssel2", "abc") = "xyz" Then
    MsgBox(16,"SektionsName2", "Der wert von 'schlüssel2' ist schon 'xyz' und wird nicht überschrieben.")
    Else
    MsgBox(16,"SektionsName2", "Der wert von 'schlüssel2' ist nicht 'abc' und wird nicht überschrieben.")
    EndIf

    [/autoit]
    Varriante 2
    [autoit]


    Local Const $sPath = @ScriptDir & "\Meine.ini"
    Local $aSection_Key[2][2]

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

    $aSection_Key[0][0] = "SektionsName1"
    $aSection_Key[0][1] = "schlüssel1"

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

    $aSection_Key[1][0] = "SektionsName2"
    $aSection_Key[1][1] = "schlüssel2"

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

    For $i = 0 to 1
    If IniRead ($sPath, $aSection_Key[$i][0], $aSection_Key[$i][1], "abc") = "abc" Then ; Wenn der Wert "abc" ist wird er mit xyz überschrieben


    If IniRead ($sPath, $aSection_Key[$i][0], $aSection_Key[$i][1], "Test") = "Test" Then ; Ein kleiner Test ob der Schlüssel wirklich exestiert
    MsgBox(0,$aSection_Key[$i][0],"Der Key """&$aSection_Key[$i][1]&""" wurde mit dem Inhalt 'xyz' erstellt")
    else
    MsgBox(0,$aSection_Key[$i][0],"Der Inhalt von """&$aSection_Key[$i][1]&""" wurde mit 'xyz' überschrieben")
    EndIf

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

    IniWrite ($sPath, $aSection_Key[$i][0], $aSection_Key[$i][1], "xyz")

    ElseIf IniRead ($sPath, $aSection_Key[$i][0], $aSection_Key[$i][1], "abc") = "xyz" Then
    MsgBox(16,$aSection_Key[$i][0], "Der wert von """&$aSection_Key[$i][1]&""" ist schon 'xyz' und wird nicht überschrieben.")
    Else
    MsgBox(16,$aSection_Key[$i][0], "Der wert von """&$aSection_Key[$i][1]&""" ist nicht 'abc' und wird nicht überschrieben.")
    EndIf
    Next

    [/autoit]
    Varriante 3
    [autoit]


    Local Const $sPath = @ScriptDir & "\Meine.ini"
    Local $sString = "abc"
    Local $sReplace = "xyz"

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

    Test($sPath,"SektionsName1","schlüssel1")
    Test($sPath,"SektionsName2","schlüssel2")

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

    Func Test($sPath, $sSection, $sKey)
    If IniRead ($sPath, $sSection, $sKey, $sString) = $sString Then ; Wenn der Wert "abc" ist wird er mit xyz überschrieben

    If IniRead ($sPath, $sSection, $sKey, "Test") = "Test" Then ; Ein kleiner Test ob der Schlüssel wirklich exestiert
    MsgBox(0,$sSection,"Der Key """&$sKey&""" wurde mit dem Inhalt '"&$sReplace&"' erstellt")
    else
    MsgBox(0,$sSection,"Der Inhalt von """&$sKey&""" wurde mit '"&$sReplace&"' überschrieben")
    EndIf

    IniWrite ($sPath, $sSection, $sKey, $sReplace)

    ElseIf IniRead ($sPath, $sSection, $sKey, $sString) = $sReplace Then
    MsgBox(16,$sSection, "Der wert von """&$sKey&""" ist schon '"&$sReplace&"' und wird nicht überschrieben.")
    Else
    MsgBox(16,$sSection, "Der wert von """&$sKey&""" ist nicht '"&$sString&"' und wird nicht überschrieben.")
    EndIf
    EndFunc

    [/autoit]

    Ich habe hier mal 3 kleine Scripte geschrieben welche den Wert von schlüssel1 in 'xyz' ändert falls er zuvor 'abc' war oder nicht existierte, wenn der Wert etwas anderes ist passiert nichts.

    Was mich etwas irretiert ist dein Anfang, welcher etwas ganz anderes macht als du beschreibst:

    Geändert werden soll der Wert abc in xyz


    Dein Script prüft aber erst nach ob der Wert etwas anderes ist als "abc"

    If IniRead ($iniPath, "SektionsName1", "schlüssel1", "abc") <> "abc" Then


    Also würde doch jeder wert in xyz umgeschrieben werden, mit Ausnahme von denen wo's angedacht war ^^

    €: ;( zu langsam

    2 Mal editiert, zuletzt von Zeitriss (29. Dezember 2012 um 05:01)

  • Wünsch euch ein gesundes neues Jahr 2013!

    Raupi
    Dank dir erstmal. So oft benötige ich das nicht, darum hab ich mich auch noch nicht so intensiv damit beschäftigt. Für das was ich mache/ machen will finde ich hier eigentlich immer schöne Ansätze ;)
    Irgendwo bei deinem Bsp. ist was faul, denn es springt direkt zur MsgBox "Schlüssel existiert nicht oder unerwarteter Wert" obwohl beide Werte abc sind.

    Zeitriss
    Auch dir ein Dankeschön für deine Beispiele. Ja, es sollte schon geprüft werden ob der Wert überhaupt abc ist (am besten sogar an beiden Stellen) ansonsten soll da nichts dran geändert werden oder der Wert dazu geaddet werden.

    • Offizieller Beitrag

    Das die Ini nicht gelesen wird liegt hieran:

    [autoit]

    Global $iniPath = '@ScriptDir & "\meine.ini"'

    [/autoit]


    Da sind ein Paar ' zuviel, ich hab deinen Quellcode benutzt, ohne es laufen zu lassen.
    Sollte eigentlich so aussehen:

    [autoit]

    Global $iniPath = @ScriptDir & "\meine.ini"

    [/autoit]
  • OK, das wars ;)

    So schauts jetzt aus und funktioniert soweit auch ganz gut.

    [autoit]


    Global $iniPath = @ScriptDir & "\meine.ini"

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

    $ini1 = IniRead ($iniPath, "SektionsName1", "Schlüssel1", "not found")

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

    $ini2 = IniRead ($iniPath, "Sektionsname2", "Schlüssel2", "not found")

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

    Func _Message()
    MsgBox(64,"Info","Erfolgreich geändert.")
    EndFunc

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

    If $ini1 = "abc" And $ini2 = "abc" Then
    IniWrite ($iniPath, "SektionsName1", "schlüssel1", "xyz")
    IniWrite ($iniPath, "SektionsName2", "schlüssel2", "xyz")
    _Message()
    Exit
    ElseIf $ini1 = "abc" And $ini2 = "xyz" Then
    IniWrite ($iniPath, "SektionsName1", "schlüssel1", "xyz")
    _Message()
    ElseIf $ini1 = "xyz" And $ini2 = "abc" Then
    IniWrite ($iniPath, "SektionsName2", "schlüssel2", "xyz")
    _Message()
    Exit
    ElseIf $ini1 = "xyz" And $ini2 = "xyz" Then
    MsgBox(0,"Info","Wert ist bereits gesetzt")
    Exit
    Else
    MsgBox(0,"Info","Schlüssel existiert nicht oder unerwarteter Wert")
    Exit
    EndIf

    [/autoit]


    Könnte vllt. eleganter aussehen... :D

  • Ich hatte BugFix dies bezöglich bereits angeschrieben (zu allen gelöschten Beiträge von IPU).
    Es wurde gesagt, dass sie die ganzen Post editiert hat und somit die Inhalte gelöscht hat.
    Somit kann BugFix diese nicht wiederherstellen.

    Das ist mein Informationsstand :)
    Aber kann ja sein das dieser beitrag evtl. Nicht editiert wurde.
    (Korregiert mich bitte wenn ich falsch liegen sollte)

    Stand in den Post etwas wichtiges drinne was dir weitergeholfen hat?
    Weißt du in etwa worum es geht? Evtl. Kann man dir auch so weiterhelfen...

  • Es waren einige MsgBox in einer Funktion mir Variable, hab noch kein ähnl. Bsp. wieder gefunden.

    Bruchstücke die mir noch so im Kopf rumschwirren...

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    _message(1)
    _message(2)
    _message(3)

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

    Func _message($var)
    1 = MsgBox(64, "blabla")
    2 = MsgBox(0, "tralala")
    3 = MsgBox(64, "usw.")
    Endfunc

    [/autoit]


    Hatte es auch HIER drüber versucht, aber ohne Erfolg.

  • Sowas?

    [autoit]


    _message(1)
    _message(2)
    _message(3)

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

    Func _message($var)
    Switch $var
    Case 1
    MsgBox(64, "", "blabla")
    Case 2

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

    MsgBox(0, "", "tralala")
    Case 3
    MsgBox(64, "", "usw.")
    EndSwitch
    EndFunc ;==>_message

    [/autoit]
  • i2c
    Die gleiche Funktion hats auf jeden Fall! Thx dafür!

    Speichere mir sonst auch sämtl. Scripte/Schnipsel ab, die ich bei der Suche finden konnte und mir irgendwann mal weiterhelfen können - ausser dieses... :(

  • Hi, die Lösung von i2c etwas angepasst. ;)

    [autoit]


    _message(1)
    _message(2)
    _message(3)
    _message(4)
    _message(5)
    Exit

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

    Func _message($var)
    Local $flag, $msg
    Switch $var
    Case 1
    $flag = 0
    $msg = "blabla"
    Case 2
    $flag = 16
    $msg = "Oh oh !"
    Case 3
    $flag = 32
    $msg = "usw."
    Case 4
    $flag = 48
    $msg = "tralala"
    Case 5
    $flag = 64
    $msg = "usw."
    EndSwitch
    MsgBox($flag, "", $msg & @TAB)
    EndFunc ;==>_message
    ; Ende

    [/autoit]