Discussion:
regexpr help.
(trop ancien pour répondre)
kurtz le pirate
2012-12-29 16:49:42 UTC
Permalink
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
Marc Espie
2012-12-29 19:33:33 UTC
Permalink
Post by 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
/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
Post by kurtz le pirate
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
/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
2012-12-30 17:05:34 UTC
Permalink
[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
Loading...