kurtz le pirate
2012-12-29 16:49:42 UTC
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
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
klp