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.66Diese 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.
-
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.