[m4] substr()

Le
JKB
Bonsoir à tous,

Je corrige un bout de m4 en découvrant certaines fonctionnalités de
l'outil que je n'avais jamais utilisées (les fonctionnalités, pas
l'outil, ne me faites pas dire ce que je ne voudrais pas qu'on
entende ;-) )

En particulier, j'ai un truc bizarre mais qui doit s'expliquer avec
substr() :

define(`API', 08 cf $1 substr($1, `0', `1') 00)dnl

Si la macro API est appelée comme ceci : API(AZ), je ne vois pas
pourquoi le résultat est :

08 cf AZ $ 00

En d'autres termes, pourquoi le $1 dans substr n'est pas expansé.
Google n'a pas été mon ami sur ce coup-là. Une idée ?

Merci d'avance,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse
=> http://grincheux.de-charybde-en-scylla.fr
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
Cyrille Lefevre
Le #24335651
Le 19/03/2012 17:58, JKB a écrit :
Bonsoir à tous,

Je corrige un bout de m4 en découvrant certaines fonctionnalità ©s de
l'outil que je n'avais jamais utilisées (les fonctionnalités , pas
l'outil, ne me faites pas dire ce que je ne voudrais pas qu'on
entende ;-) )

En particulier, j'ai un truc bizarre mais qui doit s'expliquer avec
substr() :

define(`API', 08 cf $1 substr($1, `0', `1') 00)dnl

Si la macro API est appelée comme ceci : API(AZ), je ne vois pas
pourquoi le résultat est :

08 cf AZ $ 00

En d'autres termes, pourquoi le $1 dans substr n'est pas expansé.
Google n'a pas été mon ami sur ce coup-là. Une idé e ?



Bonjour,

je ne peux t'expliquer le pourquoi du comment, mais à coup d'essais
plus ou moins douteux, voici 2 solutions :

1/
define(`API', 08 cf $1 `ifelse($1,,,substr($1, 0, 1))' 00)dnl
API(AZ)

2/
define(`API', `ifelse($1,,,08 cf $1 substr($1, 0, 1) 00)')dnl
API(AZ)

indice : gg m4 define substr :-)

http://mbreen.com/m4.html#ignore_argless_macros

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Paul Gaborit
Le #24335841
À (at) Mon, 19 Mar 2012 16:58:49 +0000 (UTC),
JKB
Je corrige un bout de m4 en découvrant certaines fonctionnalités de
l'outil que je n'avais jamais utilisées (les fonctionnalités, pas
l'outil, ne me faites pas dire ce que je ne voudrais pas qu'on
entende ;-) )

En particulier, j'ai un truc bizarre mais qui doit s'expliquer avec
substr() :

define(`API', 08 cf $1 substr($1, `0', `1') 00)dnl

Si la macro API est appelée comme ceci : API(AZ), je ne vois pas
pourquoi le résultat est :

08 cf AZ $ 00

En d'autres termes, pourquoi le $1 dans substr n'est pas expansé.
Google n'a pas été mon ami sur ce coup-là. Une idée ?



C'est parce que m4 expande tout... même les arguments de define. Il faut
donc tout quoter :

define(`API', `08 cf $1 substr($1, `0', `1') 00')dnl
API(AZ)
# -> 08 cf AZ A 00

Ou en plus simple :

define(`API', `08 cf $1 substr($1, 0, 1) 00')dnl
API(AZ)
# -> 08 cf AZ A 00

--
Paul Gaborit -
JKB
Le #24335961
Le Tue, 20 Mar 2012 07:55:22 +0100,
Paul Gaborit

À (at) Mon, 19 Mar 2012 16:58:49 +0000 (UTC),
JKB
Je corrige un bout de m4 en découvrant certaines fonctionnalités de
l'outil que je n'avais jamais utilisées (les fonctionnalités, pas
l'outil, ne me faites pas dire ce que je ne voudrais pas qu'on
entende ;-) )

En particulier, j'ai un truc bizarre mais qui doit s'expliquer avec
substr() :

define(`API', 08 cf $1 substr($1, `0', `1') 00)dnl

Si la macro API est appelée comme ceci : API(AZ), je ne vois pas
pourquoi le résultat est :

08 cf AZ $ 00

En d'autres termes, pourquoi le $1 dans substr n'est pas expansé.
Google n'a pas été mon ami sur ce coup-là. Une idée ?



C'est parce que m4 expande tout... même les arguments de define. Il faut
donc tout quoter :

define(`API', `08 cf $1 substr($1, `0', `1') 00')dnl
API(AZ)
# -> 08 cf AZ A 00

Ou en plus simple :

define(`API', `08 cf $1 substr($1, 0, 1) 00')dnl
API(AZ)
# -> 08 cf AZ A 00



Merci du tuyau, je viens d'apprendre quelque chose ;-)

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Publicité
Poster une réponse
Anonyme