Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

regexpr help.

3 views
Skip to first unread message

kurtz le pirate

unread,
Dec 29, 2012, 11:49:42 AM12/29/12
to

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

unread,
Dec 29, 2012, 2:33:33 PM12/29/12
to
In article <kurtzlepirate-F23...@news-1.proxad.net>,
kurtz le pirate <kurtzl...@yahoo.fr> 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 {}]*?)}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 !!!

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

unread,
Dec 30, 2012, 12:05:34 PM12/30/12
to
In article <kbngid$41i$1...@saria.nerim.net>, es...@lain.home (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
0 new messages