Key tree aus Datei auslesen

LRS3link

Grünschnabel
Hallo zusammen, ich habe ein Problem mit einer Datei, die ich einlesen soll. Die Daten sind als Schlüssel-Wert Paare in einer Art Liste, dem key tree abgelegt. Wobei der Schlüssel immer ein String ist. Der key tree sieht dann so aus:

(.(."Keyname1",value1),("Keyname2",value2),("Keyname3",value3),......)

"Keyname" ist immer ein String variabler Länge, der durch " " begrenzt wird.

value kann entweder ein Integer, ein String unterschiedlicher Länge, ein weiterer key tree oder eine durch Kommas getrennte Liste in der Form (."Keyname",(value1, value2, value3,...) sein.

Die Namen der Schlüssel sind bekannt und es sind so um die 200 Stück, der key tree ist also recht groß.

Hat jemand von euch vielleicht eine Idee, wie ich die Daten sinnvoll einlesen kann, so dass ich auf den Wert, der zu einem bestimmten Schlüssel gehört, zugreifen kann

Vielen Dank schon mal für eure Antworten
:)

PS: Ich benutze Visual C++ 6 falls das wichtig ist
 
Hört sich für mich stark nach einer Ini an, ich habe mir mal eine Iniklasse geschrieben, du musst sie nur noch anpassen: Header
C++:
class inifile{
    public:
        char* Auslesen (char* section, char* key);
        void Zuweisen (char *ini_pfad_input);  
        inifile (char *ini_pfad_input);
        inifile();
    private:
        char inipfad[1000];
};

code:
C++:
#include <stdio.h>
#include <string.h>

//---------------------------------------------------------------------------------------
inifile::inifile(char *ini_pfad_input)
{
    memset (inipfad, '\0', sizeof (inipfad)); 
    sprintf(inipfad, "%s", ini_pfad_input);
}

inifile::inifile()
{
    memset (inipfad, '\0', sizeof(inipfad));
}


char* inifile::Auslesen(char *section, char *key)
{
    char zeile[10000] = {""};
    char suchkey[1000] = {""};
    char suchsection[1000] = {""};
    char *zeiger = NULL;
    char output[1000];
    FILE *file = NULL;  
    
    
    
    
    memset (output, '\0', sizeof(output));
    sprintf (suchsection, "[%s]", section);
    sprintf (suchkey, "%s=", key);
    
    file = fopen(inipfad, "r");
    
    while(fgets(zeile,sizeof(zeile),file)){
        zeiger = strstr(zeile, suchsection);
        if (zeile == zeiger){//richtige section gefunden
            while(fgets(zeile,sizeof(zeile), file)/* && zeile[0]!='[' */){
               zeiger = strstr(zeile, suchkey);
               if (zeile == zeiger){//richtigen key gefunden
                    sprintf(output,"%s", zeile+strlen(suchkey));
                }
            }
        }
        fclose (file);
    }
    return output;
    
}
        
    
void inifile::Zuweisen(char *ini_pfad_input)
{
    sprintf(inipfad, "%s", ini_pfad_input);
}
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort, aber es handelt sich nicht um eine INI-Datei. Es sind Daten, die so an einem Stück abgelegt wurden. Aber trotzdem danke für die Hilfe, mal sehen vielleicht kann aich einiges davon benutzen .
 
Zurück