Bonjour.
Je rencontre le problème dans Perl Tk, mais c'est peut-être plus général.
La méthode tagRanges("sel") du widget Text renvoie une liste (autrement dit un tableau, à moins qu'il n'y ait entre les listes et les tableaux une différence qui m'échappe) d'indices.
J'aurais besoin de connaître la taille de ce tableau. (Cette taille est égale au double du nombre des parties séparées du texte qui sont sélectionnées).
Pour connaître la taille d'un tableau nommé, par exemple @tableau, Holzner, p. 88, donne 4 façons :
1° $#tableau + 1 (renvoie la taille du tableau);
2° scalar(@tableau) (renvoie la taille du tableau);
3° @tableau + 0 (renvoie la taille du tableau);
4° my $taille = @tableau (met dans $taille la taille du tableau)
Il me semble évident que 1° ne peut pas être étendu à un tableau non nommé.
J'ai essayé d'imiter 2° de la façon suivante :
mais le résultat est incorrect : c'est le tableau lui-même qui s'affiche, et non sa taille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $monWidgetTexte->messageBox( -message => scalar($monWidgetTexte->tagRanges("sel") ))
Si on essaie d'imiter 3° de la façon suivante :
c'est un nombre qui s'affiche, mais pas le bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $monWidgetTexte->messageBox( -message => $monWidgetTexte->tagRanges("sel") + 0)
Ce qui m'étonne vraiment, c'est que l'application de 4° que voici :
ne fonctionne pas non plus comme souhaité : cela n'affiche pas la taille, mais tout le tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 my $taille = $monWidgetTexte->tagRanges("sel"); $monWidgetTexte->messageBox( -message => $taille);
Finalement, la seule méthode correcte que j'aie trouvée est :
Pourtant, cette méthode ne me satisfait pas, parce que je supose que la première des deux instructions provoque une copie du tableau (ou de la liste), qui risque d'être volumineux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 my @liste = $monWidgetTexte->tagRanges("sel"); $monWidgetTexte->messageBox( -message => scalar(@liste) );
Quelqu'un voit-il une meilleure méthode ?
Merci d'avance.
M.
Partager