mehrere ini Dateien in Combobox

  • Guten Morgen zusammen,

    ich habe ein Problem mit mehreren ini Dateien.
    Ich möchte von jeder Datei die IniReadSection lesen
    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $iniWahl = GUICtrlCreateCombo("...", 384, 112, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $MeineIni = @ScriptDir & "\ini\tiere.ini"
    $var = IniReadSection(@ScriptDir & '\ini\tiere.ini', "Titel")
    $link = IniReadSection(@ScriptDir & '\ini\tiere.ini', "Link")

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

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

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

    Case $iniWahl

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

    EndSwitch
    WEnd

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

    Diese möchte ich aber per Combobox auswählen
    Kurze Erklärung:

    1. Es gibt mehrere ini Dateien (der Aufbau ist immer gleich)
    2. Es gibt einen Ordner wo sich alle inis befinden. (@ScriptDir & "\ini\)
    In diesen Ordner kommen weitere inis von Zeit zu Zeit hinzu.

    Ini Beispiel

    Spoiler anzeigen


    [Titel]
    1=Hunde
    [Link]
    1=www.hunde.de

    Das Problem und Ablauf

    1. Geht das, daß man alle ininamen (dateinamen) in die Combobox automatisch einlesen kann?
    2. Kann man zur Laufzeit (ohne alles im Code neu zu schreiben) die ini anhand
    der Auswahl der Combobox auslesen?

    Beispiel:

    Spoiler anzeigen


    Der Ini Ordner enthält 3 Ini Dateien
    Hunde.ini
    Katzen.ini
    Vögel.ini

    Diese Namen sollte nun in die Combobox eingelesen werden
    Hunde.ini
    Katzen.ini
    Vögel.ini

    Wählt man Katzen
    dann wird aus der Katzen.ini gelesen.

    Wird der Inhalt des IniOrdners
    erweitert z.B. Welpen.ini kommt hinzu, dann sollte das auch funktionieren,
    ohne jedesmal den Quellcode neu zu schreiben. Combobox wird ergänzt...

    Ist das irgendwie möglich?

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (19. Juli 2011 um 19:35)

    • Offizieller Beitrag

    Na klar geht das.
    - Beim Skriptstart mit IniReadSectionNames alle Sektionen ermitteln und in ein Array schreiben
    - Zur Laufzeit zwecks Auswahl durch den User die Sektionsnamen in einer Sektions-Combo auflisten
    - Je nach Auswahl mit IniReadSection die jeweilige Sektion einlesen (Rückgabe ist ein Array)
    - Inhalts-Combo jetzt aus dem Array befüllen (vorher alte Werte löschen)

  • Hallo Bugfix,

    danke für die Hinweise.
    Noch ein paar Fragen:
    Der IniOrdner kann 5, 10 oder mehrere inis enthalten. (Inhalt ist unbekannt)
    Bei inireadsection muß man doch jede ini einzeln angeben, bevor man Sie ausliest.

    Wie kann ich den Inhalt aller inis im Ordner ermitteln?

    Tappe da noch etwas im dunkeln...

    Grüße
    Ilse ;)

  • Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $a_IniFiles[1] = [0]
    Global $search = FileFindFirstFile(@ScriptDir & '\ini\*.ini')

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

    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop FileClose($search)
    _ArrayAdd($a_IniFiles,$file)
    $a_IniFiles[0] +=1
    WEnd
    _ArrayDisplay($a_IniFiles)

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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Zitat

    Beim Skriptstart mit IniReadSectionNames alle Sektionen ermitteln

    BugFix ,

    Ilse schreibt doch, dass Sie eine unbekannte Anzahl an ini-Dateien hat, deren Namen Sie erstml ermitteln muss.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo,

    konnte mich gestern leider nicht mehr melden.
    Bin aber schon ein Stück weiter...

    Danke erstmal für dein Beispiel Schnuffel
    und natürlich ein merci für BugFix

    Liebe Grüße
    Ilse ;)

  • Schnuffel, warum so kompliziert? Wäre es nicht einfacher so:

    [autoit]

    #Include <File.au3>
    $a_IniFiles = _FileListToArray(@ScriptDir & '\ini', '*.ini',1)

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!

  • einfacher: ja :D
    aber ich bin kein Freund davon ganze Sammlungen von Funktionen zu includen,
    wenn ich nur eine brauche (und jetzt nich --> da gibt es doch Organize Includes)
    das macht den Aufwand nur noch größer.

    Und wenn Du Dir _FileListToArray ansiehst, dann arbeitet das auch nur mit FileFindFirstFile ... ;)

    Aber ich gebe Dir Recht. Bequemer ist es allemal.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • einfacher: ja :D
    aber ich bin kein Freund davon ganze Sammlungen von Funktionen zu includen,
    Aber ich gebe Dir Recht. Bequemer ist es allemal.


    [OT]Das löst sich ganz einfach per Organize Includes + Obfuscator /striponly ;) [/OT]