[I7] Indexed text

Bonjour,

Avec I7, je veux voir si le texte contenu dans une variable est de la forme « ***24 », c’est-à-dire trois astérisques suivis par un nombre, et si c’est le cas je veux pouvoir récupérer le nombre ( 24, dans ce cas ) dans une autre variable.

Est-ce possible ?

Merci.

Tout d’abord, si tu utilises 6L38, tu n’as plus à dire « indexed text » mais simplement « text », car Inform passe de l’un à l’autre automatiquement depuis cette version.

Pour répondre à ta question, il faut utiliser une expression régulière.

if ma-variable exactly matches the regular expression "\*\*\*\d+: let T be ma-variable; replace the text "***" in T with ""; say "[T].";
Je n’ai pas testé et je ne garantis pas la validité de mon expression régulière, mais ça devrait être ça.

Par contre, ce que tu récupère est un texte contenant ton nombre, pas un vrai nombre. Par défaut, on ne peut pas convertir un texte en nombre, on en avait déjà parlé.

Mais il y a aussi une autre façon que celle décrite dans le lien, c’est justement d’utiliser une snippet, mais ça tient un peu du hack. Il faut ajouter cela après le code ci-dessus :

let former player's command be "[player's command]"; let N be a number; change the text of the player's command to T. if the player's command matches "[number]": [On sait que c'est le cas, mais c'est juste pour récupérer le nombre.] now N is the number understood; change the text of the player's command to former player's command;
On sauvegarde la commande du joueur, on la remplace par notre texte qui contient le nombre, et on utilise le parser pour l’analyser et obtenir le nombre. À la fin, on remet l’ancienne commande, au cas où. Le défaut, c’est que ça change le number understood. Donc si cette règle se passe lors d’une action s’appliquant à un nombre, on perd le nombre que le joueur a tapé, ce qui peut causer des bugs s’il est utilisé plus tard. Dans la majorité des cas, ça ne devrait pas poser problème, je pense.

Merci. :smiley: