"Bertel" == Bertel Lund Hansen <nospamfor@lundhansen.dk> writes:
> Hej alle
> Konkret drejer det sig om at jeg skal aflæse headere i
> usenetindlæg, men problemet er generelt.
> Jeg kan naturligvis teste nede i koden:
> if (strstr(linje,"From:")) read_fromheader();
> Men det vil jo give 30+ søgninger med strstr() af den samme
> streng.
> Min tidligere løsning bestod i at gemme headertitlerne i et array
> og så referere til dem med numre. Så kunne testen lægges i en
> switch:
> switch (headernr) {
> case FROM: read_fromheader(); break;
> osv.
> }
...
> Så tænkte jeg på at jeg i initdelen kunne lave en struktur der
> læste headernames[] igennem og så tildelte nummerværdier til de
> tilsvarende variable, men så er jeg jo tilbage ved begyndelsen.
> Min første version får alle fasta data specificeret i C-filen,
> men den færdige version kommer nok til at læse en inifil, så
> løsninger til den fremgangsmåde er også velkomne.
Er opgaven at matche de enkelte headere til en funktion, der
behandler den givne linie?
Du kan lave et array med den faste tekst og funktionen:
struct headerhandler {
const char *hh_type;
void (*hh_handler)(char *);
};
struct headerhandler[] = {
{"From:", read_fromheader},
...
}
Når du så skal parse en besked, metcher du de enkelte headerlinier
med hh_type, og når du har et match, kalder du *hh_handler().
--
/Wegge <
http://outside.bakkelygaard.dk/~wegge/>