Schlüssel auslesen INI-Files

  • Hallo Liebe AutoIT'ler,

    ich möchte ein Programm schreiben, welches mir eine INI Datei anlegt.
    Als Sektion möchte ich das Heutige Datum haben.

    Nun kommt das Problem...

    Jedesmal wenn ich das Programm Starte, erkennt er zwar das Datum, und wenn es
    sich geändert hat wir auch eine neue Sektion angelegt, aber ich weiß nicht wie ich die Schlüssel auslesen kann.

    Also ich meine es so:

    [20.12.2009]
    1=test
    2=testtest
    3=testtesttest
    [21.12.2009]
    1=testA
    2=testB

    Mit 1,2,3 meine ich die Schlüssel,
    wie kann ich meinem Programm beibringen, dass wenn ich es starte es erst den letzten Schlüssel aussließt (Bsp: 3) und da dann weiterzählt also die 4 nimmt...
    Ich komme leider immer nur bis zur 1.
    Sobald ich das Programm nochmal starte wird die 1 einfach überschrieben.

    Danke

  • guck mal mit der funktion kannst du den schlüsse innen Array Laden


    [autoit]


    $Sektion = IniReadSection("Konf.ini","20.12.2009")

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

    MsgBox(0,0,$Sektion[3][1]) ;<=== Da sind die Daten des Schlüssels 3 drinne

    [/autoit]

    //Edit:Wenn du die die Return Daten ansehen willst dann mit

    [autoit]


    #include <Array.au3>
    _ArrayDisplay($Sektion )

    [/autoit]
  • Alternativ könntest du in einer For-Schleife die Schlüssel hochzählen und dann auch entsprechend dem Wert, bei dem abgebrochen wurde, den nächsten Schlüssel schreiben. Aber das andre ist natürlich einfacher ;)

  • Ich weiß nicht ganz wie du das meinst.

    also so sieht mein code im moment aus

    $eingabe = InputBox ("","Geben Sie einen Text ein","text")
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,"1",$eingabe)

    ich muss irgendwie die "1" anders deklarieren

    Grüße

  • Statt dem IniWrite:

    [autoit]


    $sec = IniReadSection("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR)
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,$sec[0][0] + 1,$eingabe)

    [/autoit]
  • Funzt net...

    Fehler:
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,$sec[0][0] + 1,$eingabe)
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,$sec^ ERROR

  • Überprüf mal das @error-Falg von IniReadSection und lass dir das Ergebnis als Array darstellen (_ArrayDisplay) und stells mal hier rein. Und wie lautet die vollständige Fehlermeldung?

  • Alles was er mir ausgibt ist das:

    >"D:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Dokumente und Einstellungen\Benutzer\Desktop\test_ini.au3"
    C:\Dokumente und Einstellungen\adm\Desktop\test_ini.au3 (5) : ==> Subscript used with non-Array variable.:
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,$sec[0][0] + 1,$eingabe)
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,$sec^ ERROR
    >Exit code: 1 Time: 2.416


    @error-Falg was ist das?

  • Sry, Flag, nicht Falg :whistling:
    Probier mal das:

    [autoit]


    #include <Array.au3>
    $sec = IniReadSection("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR)
    MsgBox(0, "@error ist:", @error)
    _ArrayDisplay($sec)

    [/autoit]

    Schreib hier mal den Inhalt der Msgbox und den Inhalt des Array rein.

  • Da steht eine Tabelle mit den inhalten

    row col 0 col 1
    [0] 1
    [1] 1 test2#

    bei der Box zeigts eine 0 an

  • Probier mal so:

    [autoit]

    $eingabe = InputBox ("","Geben Sie einen Text ein","text")
    $Sektion = IniReadSection("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR)
    If @error Then
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,"1",$eingabe)
    Else
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR,$Sektion[UBound($Sektion)-1][0]+1,$eingabe)
    EndIf

    [/autoit]
  • Hi,

    ein Blick in die Hilfe:

    Failure: Sets @error=1 if unable to read the section (The INI file may not exist or the section may not exist)

    Also Deín Ini File ist nicht da oder Deine Sektion. Überprüf mal.

    ;-))
    Stefan

  • Wow :)
    Geht...!

    Danke, wie hast das hinbekommen..
    ich blick das UBound net

    Danke

  • Ubound gibt die größe eines Arrays aus.

    [autoit]

    $Sektion[UBound($Sektion)-1][0]+1

    [/autoit]


    Hiermit lese ich Den Wert des Elements, welches an der letzen Stelle steht (zb: 2) und rechne ihn um 1 hoch. Alternativ würde auch diese Zeile funktionieren:

    [autoit]

    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR,UBound($Sektion),$eingabe)

    [/autoit]

    Durch das Inireadsection beinhaltet der Array immer so viele Zeilen, wie Schlüssel in der Ini vorhanden sind.
    Sind also 5 Schlüssel vorhanden, sieht der Array so aus:

    Spoiler anzeigen
    [autoit]

    ; $Sektion[0][0] = "Größe des Arrays. Also das was Ubound($Sektion) ausgeben würde"
    ; $Sektion[1][0] = "Schlüssel 1"
    ; $Sektion[1][1] = "Wert 1"
    ; $Sektion[2][0] = "Schlüssel 2"
    ; $Sektion[2][1] = "Wert 2"
    ; $Sektion[3][0] = "Schlüssel 3"
    ; $Sektion[3][1] = "Wert 3"
    ; $Sektion[4][0] = "Schlüssel 4"
    ; $Sektion[4][1] = "Wert 4"
    ; $Sektion[5][0] = "Schlüssel 5"
    ; $Sektion[5][1] = "Wert 5"

    [/autoit]


    Ubound gibt nun 6 aus, weil 0,1,2,3,4,5 vorhanden sind. Ubound()-1 gibt demzufolge 5 aus (Also das letzte "ansprechbare" Element). $Sektion[Ubound($Sektion)-1][1] = $Sektion[5][1]. (das entspricht "Wert 5")

    Hier siehst du wie der Array vorher, und nachher aussieht:

    [autoit]

    #include <Array.au3>
    ;versucht die Sektion einzulesen.
    $eingabe = InputBox ("","Geben Sie einen Text ein","text")
    $Sektion = IniReadSection("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR)
    If @error Then ; Wenn das fehlschlägt, dann erstelle einen Schlüssel "1"
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR ,"1",$eingabe)
    Else ;Ansonsten, benutze das 2D Array von IniReadSection, welches so aufgebaut ist:
    _ArrayDisplay($Sektion) ; so sieht der array vorher aus:
    IniWrite("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR,UBound($Sektion),$eingabe)
    $Sektion = IniReadSection("C:\testdatei.ini",@MDAY & "." & @MON & "." & @YEAR)
    _ArrayDisplay($Sektion) ; und so danach
    EndIf

    [/autoit]