daten aus einer ini datei in ein array[x][x] nach vorgaben umwandeln? möglich? wie?

  • hallo zusammen,

    ich habe eine ini datei mit folgendem inhalt erstellt:


    nun möchte ich diese daten auslesen und ein array[24][3] daraus machen, aber ich scheitere irgendwie daran.

    was ich bisher getan habe ist:


    ich habe viele verschiedene ansätze probiert, aber da fehlt noch das klare verständnis warum und wieso das nicht klappt. es muss aber gehen, denn die daten werden ja auch ausgelesen. dies ist wichtig, denn dieses array ist die grundlage einer 'master-tabelle' die später der dreh- und angelpunkt meiner experimente darstellen soll. ich werde aber immer nur ein thema erfragen, denn wenn ich zu viel auf einmal frage verliert man schnell die übersicht.


    hilfe wäre toll. danke vorab.

    gruss

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)

    Einmal editiert, zuletzt von SOLVE-SMART (13. April 2025 um 20:18)

  • Die naheliegendste Abfolge ist die folgende:

    1. Daten der Ini-Sektion roh einlesen (mit IniReadSection())
    2. Anzahl der eingelesenen Datensätze bestimmen (mit Ubound oder direkt im Element [0][0] von IniReadSection)
    3. Zielarray mit der gewünschten Größe deklarieren (die Anzahl aus Schritt 2 verwenden)
    4. Die Elemente vom Returnarray von IniReadSection einzeln durchgehen (mit For-To-Schleife)
    5. In der Schleife den Datenwert des aktuellen Elementes an den "|"-Zeichen trennen (mit StringSplit)
    6. In der Schleife die getrennten Werte einzeln ins Zielarray schreiben

    Fertig

    Bei dir ist daher schon einmal das Problem, dass du nie das Zielarray deklarierst.
    Auch aufpassen muss man ob die Arrays jeweils 1-basiert oder 0-basiert sind (bei IniReadSection sind die dämlicherweise 1-basiert).

    Spoiler anzeigen
  • Hi!

    Du bist da schon auf einem guten Weg. Ein paar Gedanken dazu...

    • Du musst nicht unbedingt für jeden Datensatz ein extra IniRead verwenden. IniReadSection liest nicht nur die Schlüssel aus, sondern auch die gespeicherten Werte.
    • Du greifst in einer Schleife immer wieder schreibend auf ein und dieselbe Variable $data zu (Zeile 8). Dabei überschreibst du bei jedem Durchlauf den letzten Wert, deshalb hast du am Ende auch nur den letzten Datensatz übrig.
    • Wenn es deutlich mehr Datensätze als in dem Beispiel werden, ist eine Ini-Datei vermutlich nicht die richtige Wahl. Dann macht es mehr Sinn, mit Datenbanken zu arbeiten.

    So könnte man das relativ elegant lösen, allerdings ohne Fehlerbehandlung (also z.B. fehlerhaft formatierte Einträge ignorieren oder so):

    Dabei kommt dann ein Array im Format [n][4] raus.


    Liebe Grüße

  • Und zum Wiederverwenden als Funktion könnte man es so machen:

    Ich hab noch eine Funktion hinzugefügt, die alls Sections der Ini einliest und in eine Map speichert. Dabei kann auch eine Funktion angegeben werden (z.B. "_ProcessValueData") um die Value weiter zu verarbeiten (hier z.B. in ein Array umzuwandeln).
    Die Ausgabe hab ich extra manuell gemacht, um ein Beispiel zu geben, wie man das benutzen kann.

  • ich weiß jetzt nicht, ob du auch Sektionen in der ini deklariert hast ([Section ...])

    mit einem SectionName in der ini funktioniert es mit diesem Script

    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 ausführbares Script ("as is"), 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. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • hallo zusammen.

    zunächst vielen dank für die tips und lösungsvorschläge. ich ackere mich jetzt in ruhe dadurch und teste alles mal aus um zu sehen was mir für mein vorhaben am besten passt. vielen dank für die mühen, ich weiss das sehr von allen zu schätzen.

    gruss

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)