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