IniReadSectionNames Grenze

  • Gibt es bei der o.g. Funktion eine Begrenzung der Anzahl gefundener Sektionen

    Falls sich daran nichts geändert hat, dann gelten seitens AutoIt folgende Begrenzungen :

    -> die maximal unterstützte Größe der gesamten INI-Datei beträgt 64 KB.

    -> die maximal unterstützte Größe einer INI-Sektion beträgt 32 KB.

    ==> Daten außerhalb dieser Grenzen werden nicht gelesen

    Siehe z.B. auch -> Bemerkung in der Hilfe zu IniReadSection

    -> Nur die ersten 32767 Zeichen werden aufgrund der Kompatibilität in einer Sektion gelesen.

    Es kommt also nicht darauf an wieviele Sektionsnamen Du verwendest, sondern ob diese Begrenzungen eingehalten werden (hier also 64 KB).

    Ansonsten sehe ich es so wie von alpines geschrieben : "... Was willst Du realisieren ?"

    EDIT : Es gibt auch UDF's / alternative Verfahren um das Handling von INI.Dateien selbst zu gestalten.

    EDIT 2 : google mal nach "autoit scripting dictionary"

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (19. November 2019 um 16:45) aus folgendem Grund: Typo

  • Vielen Dank Jungs,

    Ich glaube, das erklärt meinen Bug.

    Meine Ini ist 151kb groß, funktioniert aber noch.

    Doch mit ein paar Daten mehr ists vorbei. Dann werden die Letzten nicht mehr gelesen.

    Jetzt darf ich mir was zur Datenreduzierung ausdenken müssen, oder ein anderes Konzept verwenden.

  • Das würde mein Script aber ganz schön verkomplizieren

    Zurück zur Kernfrage : "Warum benötigst Du eine so große .ini-Datei. Was wird dort gespeichert" ?
    Benutzt Du die .ini quasi als Minidatenbank ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Wieso würde das deine Ini groß kompliziert machen?

    Du müsstest nur einige Sektionen in einer separaten Ini speichern.

    Dann ist es vllt. zwar nicht mehr nur eine settings.ini (oder wie auch immer sie bei dir heisst), sondern:

    - Backup-Settings.ini

    - User-Setting.ini

    - ...

    Und das könntest du dir durchaus durch Logik zusammen bauen und ist sogar bei der manuellen Betrachtung der Ini zumeist Übersichtlicher.

  • Dafür verwende ich normale Textdateien als Config-Dateien (*.cfg).

    Struktur je Zeile:

    sektion;Schlüssel=Wert;Schlüssel=Wert;Schlüssel=Wert;Schlüssel=Wert

    Ist easy mit FileReadLine, FileWriteLine, StringSplit zu handeln.

    An diese Möglichkeit hab ich auch schon gedacht.

    Ist halt nur n großer Umbau

    Spoiler anzeigen
  • Auf die Gefahr hin zu nerven :P: "Beschreibe BITTE mal genauer was Du speichern möchtest"

    Ich denke, Du beißt Dich nur an dem .ini-Ansatz fest, weil Du mit den Zugriffsfunktionen klarkommst.

    .ini-Dateien sind primär aber nicht dazu gemacht, als Datenbank zu fungieren.

    Der Vorschlag von BugFix wäre eine Alternative (zudem eine gute).

    Sooo groß wäre der Umbau nicht - außerdem gibt es sicher bereits fertige Beispiele.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Derzeit sehen die Einträge folgendermaßen aus:

    Momentan befinden sich ungefähr 430 solche Einträge in der Datenbank(ini)

  • Naja, ganz ehrlich: Zumal es ja nicht weniger Einträge werden, würde ich dringend eine (richtige) Datenbank empfehlen.

    Auf Dauer denke ich wirst du mit sowohl mit der ini (selbst wenn gesplittet), als auch der Txt auf Probleme stoßen.

    Und das Ding DANN doch noch in eine Datenbank umzumodeln wird ungleich aufwändiger.

    Noch ein Tipp zur Datenreduktion:

    Sollte (wie dein Beispiel aussieht) immer, cad = Quellpfad + Dateiname sein, würde ich entweder bei cad wirklich nur den Dateinamen speichern oder ihn aus deiner Sektion ableiten. Das spart schonmal eine Menge Zeichen/Daten.

  • Naja, ganz ehrlich: Zumal es ja nicht weniger Einträge werden, würde ich dringend eine (richtige) Datenbank empfehlen.

    Es gibt sicher noch andere Wege, aber auch ich würde zu einer Datenbanklösung raten.

    SQLite wird seitens AutoIt und anderen Programmen hervorragend unterstützt .

    SQLite-BeginnerDB

    (zudem gibt es externe SQLite-Manager)

    Es erfordert zu Beginn zwar etwas Einarbeitungszeit, aber mittelfristig wirst Du davon, auch bei anderen Projekten, profitieren.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Ich habe mal auf die Schnelle das von mir angesprochene cfg-Modell in eine UDF gegossen:

    config.au3

    An diese Möglichkeit hab ich auch schon gedacht.

    Ist halt nur n großer Umbau

    Der Umbau ist ein simples Replace-Skript für deine INI:P, dass die Aufgabe in wenigen ms erledigt.

    • Offizieller Beitrag

    Ich habe mal noch eine weitere Funktion hinzugefügt: _CfgSectionGetArray() - liest alle Schlüssel-Wert-Paare einer Sektion in ein 2D-Array.

    config.au3 v0.2