Config File lesen und auswerten



  • Hallo schon wieder.

    Nächstes Problem.

    Ich habe eine Config Datei ich auslesen muss.

    Diese sieht so aus:

    # FDM Monitor Configuration File

    fdm powerline frequency = 50 Hz
    fdm analog 1 = 500 mHz
    fdm analog 2 = 500 mHz

    # Enable automatic monitoring
    # if you disable this there will be no alarms sent
    monitor=1

    # Set upper and lower limits
    upper limit = 50.500
    lower limit = 49.500

    # enable remote display connections
    # all displays need to accept TCP connections on port 10001
    # and will receive the standard FDM string as described in the
    # manual

    # Please note that you can set up max. 15 displays here
    # by adding/uncommenting "display = " lines
    display = 192.168.0.123
    display = 10.10.2.10
    display = 172.16.25.66

    Diese will ich auslesen, die Werte extrahieren, ggf abändern und neu abspeichern.

    Dies mache ich bis jetzt so:

    FDMCONFIG = fopen("/etc/fdm_monitor.conf", "r");
    
        //Konnte FDM Config gelesen werden?
        if( !FDMCONFIG )
            goto done;
    
        //Inhalt der FDM Config lesen und in Variablen speichern
        char line[256];
    int linenum=0;
    while(fgets(line, 256, FDMCONFIG) != NULL)
    {
            char ip[256], mac[256];
    
            linenum++;
            if(line[0] == '#') continue;
    
            if(sscanf(line, "%s = %s", ip, mac) != 2)
            {
                    fprintf(stderr, "Syntax error, line %d\n", linenum);
                    continue;
            }
    
            printf("Line %d:  Key %s Wert %s\n<br />", linenum, ip, mac);
    }
        //fdm_info schließen
        fclose(FDMCONFIG);
    

    Bei den displays ganz unten funktioniert es.

    Bei den anderen Werten nicht. Ich vermute wegen den White Spaces.

    Was kann ich da machen??



  • Richtig vermutet.
    Du kannst statt %s den []-Specifier nehmen. In den Klammern kannst du angeben welche Zeichen erlaubt sind, bzw. welche nicht erlaubt sind (mit einem ^davor)

    if(sscanf(line, "%255[^=]= %255s", ip, mac) != 2)
    

    Ungetestet.


  • Mod

    if(sscanf(line, "%[^=] = %s", ip, mac) != 2)
    

    Aber übernimm das nicht blind. Guck dir nachmal an, welche Formatspezifizierer scanf bietet und was sie genau bedeuten und warum %s nicht funktioniert hat.

    Du willst vermutlich den so gelesenen Wert noch vorne und hinten von Whitespace entfernen, das schaffst du aber bestimmt selber. Ich wollte dich nur darauf aufmerksam machen.

    Jetzt verstehst du vielleicht auch, wieso bei vielen Anwendungen in der freien Wildbahn die Konfigurationsdaten keine Whitespaces enthalten. 🙂



  • Funktioniert perfekt.

    Dankeschön.



  • Vergessen: Das Leerzeichen vor dem = wird da dann auch mit eingelesen.


Anmelden zum Antworten