Ini-Ähnliche Datei parsen



  • Folgendes,
    ich möchte eine Bibliothek erstellen, die eine Datei einliest. Diese soll dann mal in einem OpenSource Editor eingegliedert werden.

    Die Datei hat eine Art INI Format, dazu gibts bereits einiges an Bibliotheken, die aber meist recht aufgebläht sind und nicht ganz das, was ich suche. Das Ganze ist nicht leicht zu realisieren. Desweiteren ist es ja nicht "ganz" das Ini Format, das "=" beim Unterbegriff fehlt!

    Die Datei hat an sich folgenden Aufbau:

    [Oberbegriff1]
    Unterbegriff1
    Unterbegriff2
    Unterbegriff3

    [Oberbegriff2]
    Unterbegriff1
    Unterbegriff1
    Unterbegriff2

    Die Datei soll also eingelesen werden und dann jeweils passend geparsed, sprich:
    Er soll den Begriff in Klammen nehmen und dann solange wieder einlesen, bis wieder ein Begriff in Klammern kommt.

    Mein Ansatz steht bereits, funktioniert aber so klarerweise noch nicht - da er nur so ein kurzer Gedankenblitz war.

    void loaddata()
    {
    FILE *pfile;
        char *zeile; 
    
        char datei[30];
        printf ("   Bitte geben Sie den Dateinamen an: ");
        gets (datei);
        pfile = fopen(datei,"r");
        if (pfile == NULL)
        {
            printf ("\n   Fehler beim Zugriff auf die Datei!\n");
            taste ();
            main ();
        }
            else
            {
                if((zeile=(char *)malloc(255*sizeof(char)))==NULL)
                {
                    printf ("Fehler!");
                }
    
            while((fgets(zeile,255,pfile))!=NULL)
            {
                char trenner[] = "[";
                char trenner2[] = "]";
                char *token;
                token = strtok( zeile, trenner );
                    while( token != trenner2 )
                    {
                                    printf( " %s\n", token );
    
                    token = strtok( NULL, trenner );
    
       }
        }
        fclose (pfile);
    }
    }
    

    Falls jemand ne Idee hat, immer her damit!
    Die Logik brauche ich halt, der Rest (Speicherung, Übergabe) ist ja derzeit egal.

    Mir wäre auch ein kompletter Neuansatz recht! Danke euch!
    Dj2K



  • Habe heute Nacht kein Kopf mehr für den Programmcode, also erklär ich dir nur
    wie du es machen könntest:

    |----------|
    |DateiLaden|
    |----------|
    |Oberbegriff|
    |  suchen   |
    |-----------|
    |Unterbegriffe|
    |  suchen   |
    |-----------|
    

    So hast du es dir ja bereits gedacht, du könntest die Blöcke in einer Hash-Tabelle
    speichern, der Key ist immer der Oberbegriff, welcher als Value einen
    Zeiger auf ne verkettete Liste hat welche die Unterbegriffe beinhaltet.

    So würd ich es machen, aber ich weiß nicht wie weit deine Kentnisse sind.



  • Hi!

    Danke für die Antwort 🙂

    Nur leider setze ich derzeit noch Arrays ein - dafür müsste ich dann das Programm gänzlich umschreiben, um die verketteten Listen herzustellen.

    Naja, sagen wir es so, wenn ich dadurch eine vernünftige Lösung hätte, würde ich auch den Mehraufwand hinnehmen - nur wie ? 🙂

    Gruß,
    Dj2K



  • Schau dir im OpenBook von www.pronix.de mal die Hashtabellen und Listen an
    ist sehr gut erklärt und ich denke später wird der Code dadurch leichter
    zu verwalten und übersichtlicher als ein Dschungel aus Arrays.



  • Mmh, das bringt mir jetzt aber fürs Auslesen direkt nichts...

    Denn ich bräuchte ja die entsprechenden Schleifen.

    Dj2K



  • verwende doch das windows-INI format. winapi bittet doch 'ne ganze palette an funktionen. hier ein bsp. aus winapi FAQ:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39388



  • @ich_ich:

    Leider kann ich die Funktion nicht verwenden!
    Denn es muss Ansi C konform sein 😞

    Gruß,
    Dj2K


Anmelden zum Antworten