[C] Config Dateien

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [C] Config Dateien

    Hallo zusammen,

    über die Suche hab ich leider nichts passendes gefunden, Google liefert mir nur nicht passende Lösungen oder C++ spezifische Wege.

    Ich stricke gerade an einem tool welches mir unter Linux ein paar Informationen über eine MySQL Datenbank preisgibt.

    Die Verbindung zu einer solchen DB ist nicht das problem, allerdings haperts im moment daran das ganze Dynamisch zu halten. (Verbindungsdaten).

    Wie lese ich eine Standard Linux CFG´s aus?

    Code:
    #
    # CFG  
    #
    
    MySqlUser root
    MySqlPass 123456
    MySqlHost localhost
    Ich vermeide es sehr gerne das Rad neu zu erfinden. Es muss doch eine Lib geben die soetwas interpretieren kann..

    Jemand eine Idee ?
    gruss Chris

    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

  • #2
    Auf die schnelle würde mir einfallen, jede Zeile einfach einzulesen (fgets). Dann prüfst du, ob es ein Kommentar ist (ob zeile[0] ein '#' ist), dann scannst du die Zeile z.B. mit sscanf(zeile, "%s %s", key, value). Das geht allerdings nur, wenn Schlüssel und Wert keine Leerzeichen enthalten und setzt voraus, dass Kommentarzeilen immer direkt mit # anfangen...

    Wenn du es besser willst, nimm' PCRE (http://www.pcre.org) oder bastel' dir einen eigenen Parser zusammen...

    Oder nimm Flex/Bison.

    Kommentar


    • #3
      Erst mal danke für die Antwort.

      Ich möchte aber wie gesagt nicht das Rad neu erfinden. Ich dachte nur es gibt schon etwas fertiges. Irgendwie kann ich mir nicht vorstellen das jeder Entwickler sich für soetwas jedesmal etwas neues einfallen lässt...
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Original geschrieben von hhcm
        Erst mal danke für die Antwort.

        Ich möchte aber wie gesagt nicht das Rad neu erfinden. Ich dachte nur es gibt schon etwas fertiges. Irgendwie kann ich mir nicht vorstellen das jeder Entwickler sich für soetwas jedesmal etwas neues einfallen lässt...
        Ich denke mal, dass die meisten einen Scanner mit Flex/Bison erstellt haben... Schau dir halt mal irgend ein OpenSource Programm an

        Der genannte sscanf()-Weg ist aber mit ein paar Zeilen erledigt (20 Zeilen)

        Kommentar


        • #5
          20 Zeilen? Uff dann muss ich meinen Code nochmal überdenken

          *lösch*
          gruss Chris

          [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

          Kommentar


          • #6
            ACHTUNG! Nicht getestet!

            PHP-Code:
            char *szLineBuff = (char *)malloc(513), *szKey = (char *)malloc(65), *szValue = (char *)malloc(257);
            FILE *fp fopen("config.cfg""r");
            while(!
            feof(fp))
            {
                if(
            fgets(szLineBuff512fp) == NULL)
                    break;
                if(*
            szLineBuff == '#')
                    continue;
                if(
            sscanf(szLineBuff"%64s %256s"szKeyszValue) == 2)
                    
            printf("Key: \"%s\", Value: \"%s\"\n"szKeyszValue);
            }
            fclose(fp);
            free(szLineBuff); free(szKey); free(szValue); 
            Mist, falsch geschätzt, nur 12 Zeilen...

            Kommentar


            • #7
              nee du, wenn du z.B. die include stdio.h, ... void main(...) usw. dazu zählst, dann kommt es schon mit 20 Zeilen hin

              Kommentar


              • #8
                Original geschrieben von asp2php
                nee du, wenn du z.B. die include stdio.h, ... void main(...) usw. dazu zählst, dann kommt es schon mit 20 Zeilen hin
                Ich sprach aber nicht von einem ganzen Programm, was Configfiles liest, sondern nur von einem Code-Ausschnitt Was bringt schon ein Config-Reader, wenn die Werte nicht verwendet werden sondern er nur das Programm lädt, parst, und wieder beendet?

                Kommentar

                Lädt...
                X