regexpr help.

Le
kurtz le pirate
bonjour,

je ne comprends pas pour quoi le morceau de code ci dessous ne
fonctionne pas correctement.

le but est de lire un fichier "eps" et d'en extraire les "macros".

une macro est définie par un "/" suivi du nom, puis une accolade
ouvrante, une ou plusieurs fonctions, une accolade fermante et le mot
clé "dbf" à la fin. (comme les fonction peuvent être imbriquées, il peut
y avoir des accolades à l'intérieur des accolades exemples :
/n{newpath}bdf
/Xic{matrix invertmatrix concat}bdf
/S{gsave {stroke}fp grestore}bdf
/logtaper{9 mul 1 add log}bdf


j'ai donc écrit :

while(<EPSFILE>) {
chomp;
if(m#A/([a-zA-Z]*?){([a-zA-Z0-9 {}]*?)}bdfZ#) {
($macroName,$macroDef) = ($1,$2);
printf("%04d : %-12s -> %-12s",$lineNum,$macroName,$macroDef);
}
$lineNum++;
}

rien de spécial sauf que certaines lignes dans le fichier ne sont pas
reconnues, comme par exemple :

/filler{fill}bdf

et la je sèche !!!


vous auriez une idée ?
merci


--
klp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #25097312
In article kurtz le pirate

bonjour,

je ne comprends pas pour quoi le morceau de code ci dessous ne
fonctionne pas correctement.

le but est de lire un fichier "eps" et d'en extraire les "macros".

une macro est définie par un "/" suivi du nom, puis une accolade
ouvrante, une ou plusieurs fonctions, une accolade fermante et le mot
clé "dbf" à la fin. (comme les fonction peuvent être imbriquées, il peut
y avoir des accolades à l'intérieur des accolades exemples :
/n{newpath}bdf
/Xic{matrix invertmatrix concat}bdf
/S{gsave {stroke}fp grestore}bdf
/logtaper{9 mul 1 add log}bdf



C'est des definitions de fonction. Et tu ne vas reconnaitre que ceux qui
succedent a la definition de bdf (qui a des chances d'etre
/bdf{bind def}def

j'ai donc écrit :

while(<EPSFILE>) {
chomp;
if(m#A/([a-zA-Z]*?){([a-zA-Z0-9 {}]*?)}bdfZ#) {
($macroName,$macroDef) = ($1,$2);
printf("%04d : %-12s -> %-12sn",$lineNum,$macroName,$macroDef);
}
$lineNum++;
}

rien de spécial... sauf que certaines lignes dans le fichier ne sont pas
reconnues, comme par exemple :

/filler{fill}bdf

et la... je sèche !!!



Bon, tu ne vas traiter QU'UN tout petit sous-ensemble des fichiers eps.

Il n'y a aucune raison que tes definitions soient la a raison d'une
par ligne, tes caracteres de mot-cle sont un peu restreints, et il peut
y avoir des tonnes de caracteres que tu ne reconnais pas dans une definition...

J'avoue que je ne regarderai pas bien plus en detail ce que tu fais la, mais
je t'encourage chaudement a regarder d'un peu plus pres a quoi ressemble
PostScript.
kurtz le pirate
Le #25099552
In article wrote:


[snip]
Bon, tu ne vas traiter QU'UN tout petit sous-ensemble des fichiers eps.

Il n'y a aucune raison que tes definitions soient la a raison d'une
par ligne, tes caracteres de mot-cle sont un peu restreints, et il peut
y avoir des tonnes de caracteres que tu ne reconnais pas dans une
definition...

J'avoue que je ne regarderai pas bien plus en detail ce que tu fais la, mais
je t'encourage chaudement a regarder d'un peu plus pres a quoi ressemble
PostScript.



juste si, je n'ai besoin de reconnaître que très peu de fonctions !

et j'ai résolu mon problème. certaines lignes ont un espace après le
"bind def".



--
klp
Publicité
Poster une réponse
Anonyme