OVH Cloud OVH Cloud

nombre d'éléments contenus dans un tableau...

1 réponse
Avatar
kurtz le pirate
bonsoir,

un truc que je ne comprend pas. si je fais :
if ($line =~ /^f /) {
@values = split ' ',$line;
printf "%05d : %d points FACE\n",$lineCount,@values;
}

j'ai un message des tas de message d'erreur :
File "obj2pov.pl"; Line 82: Argument "f" isn't numeric in printf
<INPUTFILE> chunk 379.

** dans un sens c'est normal car $line contient :
f 981/1030/981 1003/1025/1003 1008/1024/1008
et bien sur 'f' n'est pas un nombre et le format %d ne peut pas
s'appliquer. si je supprime le format '%d', le print m'affiche tout le
contenu de la ligne "f 981/1030/9...


** mais '@values' devrait donner le nombre d'éléments du tableau. et
c'est bien le cas si je fais :
if ($line =~ /^f /) {
@values = split ' ',$line;
my $n = @values;
printf "%05d : %d points FACE\n",$lineCount,$n;
}
et la ça marche ! suis-je obligé de passer par une variable
intermédiaire ?


tout ça en fait pour pouvoir récupérer dans un tableau (@f) les triplets
extraits des lignes du genre :

f 1001/1002/1001 1002/994/1002 1007/993/1007 1006/1001/1006
f 992/989/992 1007/993/1007 1002/994/1002
f 981/1030/981 1003/1025/1003 1008/1024/1008
f 1003/1025/1003 1004/1017/1004 1009/1016/1009 1008/1024/1008
f 1004/1017/1004 1005/1009/1005 1010/1008/1010 1009/1016/1009
...

4 'triplets' pour la ligne 0
$f[0][0]="1001/1002/1001";
$f[0][1]="1002/994/1002";
$f[0][2]="1007/993/1007";
$f[0][3]="1006/1001/1006";

3 triplets pour la ligne 1
$f[1][0]="992/989/992";
$f[1][1]="1007/993/1007";
$f[1][2]="1002/994/1002";
...

$[$index] doit contenir soit 3, soit 4 'triplets'.

merci d'avoir lu jusqu'au bout :)))
klp

1 réponse

Avatar
Nicolas George
kurtz le pirate wrote in message
:
** mais '@values' devrait donner le nombre d'éléments du tableau.


Seulement en contexte scalaire ; en contexte liste ce sont les éléments du
tableau, évidemment. printf fournit un contexte liste à ses arguments. Cf.
la doc de la fonction scalar.