/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Parser
Fra : Søren Hansen


Dato : 28-08-02 17:14

Jeg skal lave en parser til GEDCOM-filer (GEnealogical Data COMmunication).

Standardens grammatiske opbygning er nøje beskrevet her:
http://www.gendex.com/gedcom55/55gcch1.htm

Og her er nogle eksempler på en sådan fils opbygning:
http://www.genealogy.org/~ttw/lines/userguide/gedcom.html

Jeg forestiller mig, at parseren skal hente ét tegn ad gangen fra en file
pointer vha. fgetc(). Eksempelvis starter hver linie med en eller flere
"digits". Disse tegn hente vha. følgende kode:

function fun_level($chars) {
global $fp;
$char = fgetc($fp);
if (ctype_digit($char)) fun_level($chars.$char);
else return $chars;
}

$fp = fopen ("test.ged", "r");
print fun_level("");

Denne kode er bare lidt rodet dels fordi de enkelte klassificerede tegn skal
returneres samlet og dels for det tegn som læses for meget i slutningen (det
tegn som ikke længere er et "digit") skal gemmes til næste funktion.

Er der en mere hensigtsmæssig måde at parse en sådan fil på?



 
 
Arnulf Sortland (29-08-2002)
Kommentar
Fra : Arnulf Sortland


Dato : 29-08-02 16:23

class GEDCOM
{
...
function GetLine()
{
$this->line="";
if(! feof( $this->fhandle) )
{
$this->line = trim( fgets( $this->fhandle, 1024) );
$this->line_no++;
}
return ( $this->line<>"" );
}

function GetLevel()
{
if( sscanf( $this->line, "%d", &$this->level) ==1)
{
return $this->level;
}else
{
if( $this->line<>"")
printf("Unknown level, line(%d):'%s'<br>\n", $this->line_no, $this->line);
return -1;
}
}
....
}
arnulf @ http://sa.no/slekt/


"Søren Hansen" <jes-s@mail1.stofanet.dk> wrote in message news:3d6cf6ae$0$699$ba624c82@nntp04.dk.telia.net...
> Jeg skal lave en parser til GEDCOM-filer (GEnealogical Data COMmunication).
>
> Standardens grammatiske opbygning er nøje beskrevet her:
> http://www.gendex.com/gedcom55/55gcch1.htm
>
> Og her er nogle eksempler på en sådan fils opbygning:
> http://www.genealogy.org/~ttw/lines/userguide/gedcom.html
>
> Jeg forestiller mig, at parseren skal hente ét tegn ad gangen fra en file
> pointer vha. fgetc(). Eksempelvis starter hver linie med en eller flere
> "digits". Disse tegn hente vha. følgende kode:
>
> function fun_level($chars) {
> global $fp;
> $char = fgetc($fp);
> if (ctype_digit($char)) fun_level($chars.$char);
> else return $chars;
> }
>
> $fp = fopen ("test.ged", "r");
> print fun_level("");
>
> Denne kode er bare lidt rodet dels fordi de enkelte klassificerede tegn skal
> returneres samlet og dels for det tegn som læses for meget i slutningen (det
> tegn som ikke længere er et "digit") skal gemmes til næste funktion.
>
> Er der en mere hensigtsmæssig måde at parse en sådan fil på?




Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste