Hilfe zu IniRead

  • Hallo

    ich kann mit $sServer = IniRead($sInifile, 'Server1', 'Servername', $SN) einen bestimmten Wert einer Ini-Datei auslesen. 'Server1' steht für die "section". Somit kein Problem. Ich kann in das dafür vorgesehene Inputfeld welches ich für die Anzeige der Ausgabe nutze, die Daten automatisch übernehmen (anzeigen lassen). $SN steht für ein GUICtrlCreateInput Feld, welches die ausgelesenen Daten mit $ES_READONLY nur anzeigt.


    Kann ich es aber auch irgendwie hinbekommen, die "section" als Handle einzutragen und auszulesen?


    Ich möchte mit IF THEN verschiedene, vom User selbst vergebene "sectionen" abfragen und in das vorgegebene GUICtrlCreateInput Feld schlreiben lassen, daher kann ich die "sectionen" nicht wörtlich selbst vorgeben.

    So stelle ich es mir vor. $sServer = IniRead($sInifile, $aUserdefinition, 'Servername', $SN) Das geht aber leider nicht.

    Die Hilfe von IniRead gibt darüber leider nichts aus.
    (All values returned are converted as a string. Therefore if you wish an integer e.g. 1000 to be a number use either Int() or Number(), like-wise if you want a hwnd to be a ptr, theuse Ptr() or HWnd().)

    Ich hoffe ihr versteht was ich meine. Habt Ihr dazu eine Idee?

  • Hi,

    ich denke hier ist ein Beispiel notwendig, denn zumindest ich verstehe grade gar nicht was du erreichen willst oder woran es scheitert.

    Nach dreimaligem lesen meine ich folgendes zu Interpretieren:

    Server1 - ist der Wert den du eigentlich haben möchtest?
    $SN - Ist die id des Input-Control welches die Daten(Server1) anzeigen soll?

    mfg
    Zeitriss

  • Schau dir mal IniReadSectionNames an.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Server1 - ist der Wert den du eigentlich haben möchtest?
    $SN - Ist die id des Input-Control welches die Daten(Server1) anzeigen soll?

    Genau so ist es.

    Server1 ist die Section, die im Moment als erste Section ausgelesen werden soll. Es kann aber mehrere Sectionen geben, die der Benutzer mittels einer 2. GUI selbst einpflegen und nachher selbst auswählen können soll. $SN - Ist die id des Input-Controls welches die Daten(Server1) oder aus allen anderen Sectionen, später anzeigen muss.

    IniReadSectionNames:
    Es scheint, als ob ich um ein Array nicht umherkomme. Eigentlich wollte ich das vermeiden weil ich das noch nicht so blicke da ich ja noch nicht weiß, wie viele Sections-Einträge letztlich vom Benutzer in die IniDatei geschrieben und ausgelesen werden müssen. Ich muss mir das mal näher in der Hilfe anschauen.

    Danke Euch beiden.

  • Vielleicht hast du dich ja auch nur falsch ausgedrückt, aber ich denke du solltest dir auch iniread nochmals in der Hilfe anschauen. Dein 4. Funktionsparameter $SN macht jedenfalls keinen Sinn. Der 4. Parameter ist zur Angabe eines Default-Wertes vorgesehen für den Fall, dass die Sektion oder der Schlüssel nicht existiert und iniread scheitert. Die ID eines Controls hat hier jedenfalls nichts verloren.

    Wie dem auch sei... wenn du eine unbestimmte Anzahl an Sektionen hast brauchst du wie schon erwähnt wurde inireadsectionnames. Das Array enthält dann alle vorhandenen Sektionen. In einer Schleife könntest du dann für jede gefundene Sektion ein inireadsection durchführen um alle in der Sektion enthaltenen Schlüssel-Wert Paare zu ermitteln, alternativ nur ein iniread für fix definierte Schlüssel die dich interessieren.

    Durch Nutzung beider "section"-Funktionen bist du 100% dynamisch und es spielt keine Rolle wieviele Sektionen oder Schlüssel es gibt. Die Schwierigkeit besteht allerdings die INI dann noch dynamisch in der GUI zu visualisieren, denn eine GUI hat oftmals fixe Grenzen und kann nicht beliebig viele Daten darstellen. Daher solltest du geeignete Controls verwenden, welche über Scrollbars verfügen. Ein Inputfeld kann jedenfalls immer nur einen Wert darstellen (außer du zeigst einen verketteten String an, was aber meist keinen Sinn macht).

    Eine typische vorgehensweise in einem Fall wie deinem wäre die Servernamen von inireadsectionnames in einer Auswahlliste (combobox oder listbox) und die Eigenschaften des jeweils ausgewählten Servers in dafür vorgesehenen Inputfeldern, Checkboxen, Radioboxen usw. anzuzeigen.

    Um Arrays kommt man da mit Sicherheit nicht herum. Programmieren ohne Arraynutzung ist wie Fahrradfahren mit Stützrädern.
    Lies dich einfach mal ins Arraytutorial von Bugfix ein: http://www.bug-fix.info/array_tut.htm

  • Ich konnte das Problem nun lösen bzw. aufgrund eines Scriptcodes (FTP-Client) von Kanashius abschauen. Funktioniert wunderbar.

    Vielen Dank für Eure Beiträge und Hilfe.