Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

regexpr help.

2 réponses
Avatar
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 {}]*?)}bdf\Z#) {
($macroName,$macroDef) = ($1,$2);
printf("%04d : %-12s -> %-12s\n",$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

2 réponses

Avatar
espie
In article ,
kurtz le pirate wrote:

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.
Avatar
kurtz le pirate
In article <kbngid$41i$, (Marc Espie)
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