ini auslesen?

  • Hallo liebe Autoitler,

    ich habe ein kleine Problem bei der Umsetzung meiner Idee.

    Was will ich?
    Ein Programm welches aus eine ini-Datei werte ausliest und diese in eine GUI schreibt.

    Es soll dann des jeweilige Wert Z.B
    xxx.ini
    [Locationx]
    Hostx=xxx.xxx.xxx.xxx

    ausgelesen werden.

    Mit den Befehlen iniRead/iniWrite kann man aus einer ini lesen und in eine ini schreiben, aber wie kann ich was auslesen wenn ich die die Werte in section , key und wert nicht kenne?

    hat hier jemand einen vorschlag wie ich dies mit autoit machen kann?
    Muss ich auf eine andere Progammsprache wechseln um diese zu realisieren?

    Danke Magic

    • Offizieller Beitrag

    Hallo und :willkommen:

    Geh in einer For-Svhleife die Sectionsnamen durch ("Location1", "Location2" usw.). Darin noch mal eine FOr-Schleife, die den Value hochzählt ("Host1", "Host2", ...). Darin machst du dann IniRead. Wenn der Rückgabewert, den du in einer Variablen speicherst, den Wert für "Wert/Schlüssel nicht gefunden" nicht hat (siehe Hilfe), dann hast du deinen richtigen Wert ausgelesen und kannst mit

    Code
    ExitLoop 2

    deine Schleifen wieder verlassen.

    Viel Erfolg damit,
    peethebee

    • Offizieller Beitrag

    Hallo und :willkommen:,

    das sollte mit den Befehlen IniReadSectionNames und IniReadSection gehen!

  • Ich danke euch für die nette Begrüßung und habe danke für die Hilfe.
    Ich habe nun diese Lösung ausgearbeitet:

    xxx.ini

    [Custom]
    Location=name
    Host1=name
    IP1=xxx.xxx.xxx.xxx

    Damit kann ich schön den einzelnen key auslesen.

    THX
    Magicmercury

  • Hi,
    das folgende Skript ließt eine ini-datei aus und stellt die einträge in einer GUI dar. Die Sections werden in eine Combobox geladen und die Einträge der aktuell ausgewählten Section darunter dargestellt. Zurückschreiben in die INI geht noch nicht... aber es dürfte schonmal ein ansatz sein.

    zum testen mußt Du in dem Script die Inidatei natürlich ändern.
    $inifile= "c:\windows\php.ini"

  • Noch eine kleine frage.

    Ich habe dieses besagt ini file. nun lass ich es duch eine do...until schleife auslesen.

    Wenn ich nun zB die Zeile Host1 auslese, wie kann ich diese in eine eigene Variable schreiben die Host1 lautet. Lese ich Host2 aus soll eine Variable gemacht werden die Host2 lautet usw. bis ich keine Hostx einträge mehr in der ini finde.

    Danke
    Magicmercury

  • Du möchtest also keinen Array in der Form $hosts[][] verwenden, sondern lieber dynamische Variablenbezeichner nutzen?
    Diese Möglichkeit bietet AutoIt (noch?) nicht. Wenn du wüßtest wieviele Host-Einträge die Ini-Datei hat, könntest Du die natürlich ohne Schleife direkt auslesen (mit: IniRead ( "filename", "section", "key", "default" )
    ). Ich vermute aber mal, dass bei der Ausführung des Programms die Anzahl der Einträge unbekannt ist, oder?

  • ja anzahl ist unbekannt. auslesen ist ja nich so das problem sondenrn das ausgelesene in eine variable schreiben.

    wegen array: mit dem hab ich mich noch nicht beschäfftigt. wie würde das mit arrays funktionieren?

    lg
    Magicmercury

    • Offizieller Beitrag

    Hallo,

    Zitat

    Original von Magicmercury
    Noch eine kleine frage.

    Ich habe dieses besagt ini file. nun lass ich es duch eine do...until schleife auslesen.

    Wenn ich nun zB die Zeile Host1 auslese, wie kann ich diese in eine eigene Variable schreiben die Host1 lautet. Lese ich Host2 aus soll eine Variable gemacht werden die Host2 lautet usw. bis ich keine Hostx einträge mehr in der ini finde.

    Danke
    Magicmercury

    dafür gibt es den Befehl:

    Assign ( "Variablenname", "Daten" [, flag] )

  • bernd670
    Assign kannte ich noch nicht, es gab da mal eine Diskussion im englischen Forum drüber, mit dem Ergebnis das dynamische Variablenbezeichner nicht gehen. Vermutlich hat da ein fleißiger Dev nachgelegt :) gut so!

    @Magicmercury

    also Du kannst mit der Funktion IniReadSection einen Bereich ([irgendwas]) auslesen. Das was die Funktion ausließt wird in einem zweidimensionalen Datenbehälter (quasi eine Tabelle) gespeichert.

    Bsp.:
    $a_sectionKeyPairs = IniReadSection($inifile,$s_text)

    $a_sectionKeyPairs[1][0] enthält hier den Keynamen (name=wert) und das Feld $a_sectionKeyPairs[1][1] den Wert zum Key (name=wert)

    wenn Du jetzt diesen Array durchlaufen möchtest, geht das zum Beispiel so:

    for $i=0 to ubound($a_sectionKeyPairs)-1
    MsgBox(0,"","name: "&$a_sectionKeyPairs[$i][0]&@cr&"wert: "&$a_sectionKeyPairs[$i][0])
    next

    mit ubound bekommst Du die Anzahl der Felder eines Arrays heraus. Die Felder sind durchnummeriert und die Nummerierung fängt bei 0 an. Damit
    beim durchlaufen der Schleife kein Index aufgerufen wird den es nicht gibt
    mußt Du die Anzahl der ermittelten Felder um eins verringern (ubound($a_sectionKeyPairs)-1).

  • danke leute ihr seit echt supa.... funktioniert wunderbar mit dem arrays.

    nur *schlechtesgewissen* hab ich noch eine frage:

    Kann ich in eine For-schleife eine Variable mit einem Fixen Namenteil und einen Variablen Namensteil erstellen?

    Zb:

    For $i=0 to 10
    Dim hallo&$i
    next


    oder so. dass ich die Werte die die For-Schleife durchlaufen später auslesen kann. Kann ich das mit autoit machen?

    Danke
    Magicmercury

    • Offizieller Beitrag

    ja mit dem Befehl Assign ( "Variablenname", "Daten" [, flag] )!

  • danke, soweit war ich auch schon nur ich habe das Problem, das ich dann diese Variable nicht auslesen kann ohne $i fix anzugeben.

    denn $hallo$i oder $hallo&$i funktioniert nicht.
    Kann man hier mit arrays arbeiten?

    • Offizieller Beitrag
    Zitat

    denn $hallo$i oder $hallo&$i funktioniert nicht.

    auslesen kann man sie so:

    • Offizieller Beitrag
    Zitat

    Kann man hier mit arrays arbeiten?

    ja, z.B. so:

  • So ich gebe auf!!! Ich bin zu dumm ich finde keinen lösungswegs für mein problem.

    Ich danke euch für die Unterstützung.

    Lg
    Magicmercury

  • naa, nicht gleich aufgeben. Poste doch mal, was Du bisher hast... dann wird es auch einfacher Dir gezielt zu helfen. ;)

  • Was soll das programm tun:

    1.) Daten aus einer .ini sollen gelesen werden
    2.) Diese Daten sollen in eine GUI eingebunden werden.
    3.) Jeder Wert unter einer Selection soll via Radio auswählbar sein.
    4.) Wenn einer der Radio ausgewählt wird soll eine aktion passieren.

    Ich glaub mein Problem ist das die Variable $hosta nicht in der while zur Verfügung steht.
    Und zu guter letzt: ich bin ein noob!

    Lg
    Magicmercury


    • Offizieller Beitrag

    Hallo,

    kannst du die INI auch noch posten?

  • Hier alles was ich habe!


    .ini