linux-l: parser fuer text-datenformat
Volker Mueller
volker.mueller at gmx.de
So Mär 28 16:51:17 CEST 1999
On Fri, 26 Mar 1999, Christof Lutteroth wrote:
[ ... Datei einlesen ... ]
>Wie mache ich das am besten/elegantesten ? (Besonders mit den # Kommentaren
>habe ich probleme, denn scanf scheint nicht zwischen leer- und
>newline-Zeichen unterscheiden zu koennen )
Am _elegantesten_ schreibst Du Dir einen Parser mittels lex und yacc. Wenn
Dir das zu sehr nach "Kanonen auf Spatzen" aussieht, kannst Du auch eine
abgespeckte Variante mit fgets()/sscanf() basteln:
[...]
if (fgets(line, MAXLEN, file) != NULL) // eine komplette Zeile einlesen
{
// die Zeile "line" zerlegen
num_args = sscanf(line, "%[A-Za-z0-9#]:%[A-Za-z0-9]", wort1, wort2);
if (num_args != 2)
{
// Nur ein Wort eingelesen
}
}
[...]
Damit liest Du (ziemlich unflexibel) _genau_zwei_ Worte aus jeder Zeile
ein, die mit einem ":" voneinander getrennt sind und die Zeichen "A-Z",
"a-z" (und das erste Wort zusaetzlich "#") enthalten koennen. In
num_args steht die Anzahl der eingelesenen Werte (Wenn in der Zeile _kein_
Doppelpunkt steht, ist num_args == 1, bei jedem in den eckigen Klammern
nicht erfassten Zeichen wird mit dem Einlesen aufgehoert.).
SEE ALSO
fgets, fscanf, sscanf, scanf, lex, yacc
Tschau, Volker
--
Volker Mueller,volker.mueller at gmx.de,http://www.in-berlin.de/user/flinux
CPU idle? Kein Problem - wir wissen Rat: http://www.distributed.net
Mehr Informationen über die Mailingliste linux-l