Discussion:
array of array
(trop ancien pour répondre)
kurtz le pirate
2024-01-15 17:17:06 UTC
Permalink
Bonjour,

Je ne sais pas s'il y a du monde qui vient encore ici, mais je tente ma
chance ;


Donc :
J'ai des données de ce genre :
f 198/216 199/218 2/3 1/1

Le but est de découper chaque couple a/b dans un tableau '@faces'
Le fichier a 'x' lignes comme ça.


J'ai donc fait pour chaque ligne du fichier :

# je decoupe sur le séparateur espace et je mets dans '@line'
@line = split ' ';

# j'enlève le 'f' du début
shift(@line);

# je découpe chaque element de @line en un tableau de deux
# valeurs sur le séparateur '/'
@line = map { [ split /\//, $_ ] } @line;

# je pousse ce tableau dans mon tableau global
push @faces, [@line];



Jusque la, cela semble correct.
L'exemple donné a 4 'couples' mais il peut y en avoir entre 3 et n.


Mais, quand je veux accéder au valeurs :
(les deux boucles c'est juste pour le debug)
for my $i ( 0 .. $#faces ) {
for my $j ( 0 .. $#{$faces[$i]} ) {
print "faces[$i,$j] = $faces[$i][$j]\n";
}
}


J'obtiens :
faces[0,0] = ARRAY(0x7f8a2987f288)
faces[0,1] = ARRAY(0x7f8a2987ea48)
faces[0,2] = ARRAY(0x7f8a29960b08)
faces[0,3] = ARRAY(0x7f8a2982d9c8)

Alors qu'avec le dumper :
$VAR1 = [
[
'198',
'216'
],
[
'199',
'218'
],
[
'2',
'3'
],
[
'1',
'1'
]
];



Si quelqu'un peut me dire où je me trompe ...
Merci d'avance.


ps : pour ceux qui ont reconnu, oui, c'est pour convertir des fichiers
obj en autre chose.
--
kurtz le pirate
compagnie de la banquise
Gosseyn
2024-01-15 23:37:40 UTC
Permalink
Post by kurtz le pirate
Je ne sais pas s'il y a du monde qui vient encore ici, mais je tente ma
chance ;
Gagné. C'est probablement pas moi le meilleur, mais bon...
Post by kurtz le pirate
f 198/216 199/218 2/3 1/1
Le fichier a 'x' lignes comme ça.
Je suis reparti de ta problématique de départ et j'ai fait un truc plus
simple, considérant que c'était toujours des couples x/y sur chaque
ligne (à part le "f" de début de ligne).

my $i = 0; # à initialiser une seule fois en dehors de la boucle de
traitement des données lues du fichier.

$ligne = "f 198/216 199/218 2/3 1/1"; # pour l'exemple, mais tu
remplaces par $_ pour lire les lignes de ton fichier de données.

@line = split (' ', $ligne);
shift(@line);

foreach my $value (@line)
{
@couple = split /\//, $value;
$faces[$i][0] = $couple[0];
$faces[$i++][1] = $couple[1];
}

for my $i ( 0 .. $#faces ) {
for my $j ( 0 .. $#{$faces[$i]} ) {
print "faces[$i,$j] = $faces[$i][$j]\n";
}
}

++
--
Alan JOBERT - ***@gosseyn.net
www.gosseyn.net
Nicolas George
2024-01-16 20:20:00 UTC
Permalink
kurtz le pirate , dans le message
Post by kurtz le pirate
faces[0,0] = ARRAY(0x7f8a2987f288)
faces[0,1] = ARRAY(0x7f8a2987ea48)
faces[0,2] = ARRAY(0x7f8a29960b08)
faces[0,3] = ARRAY(0x7f8a2982d9c8)
$VAR1 = [
Bonjour.

Je vous invite à écrire un unique programme de test qui montre à la fois ces
deux sorties. Je soupçonne que l'effort d'y arriver vous permettra de
résoudre votre problème.
kurtz le pirate
2024-01-18 11:02:29 UTC
Permalink
Post by Nicolas George
kurtz le pirate , dans le message
Post by kurtz le pirate
faces[0,0] = ARRAY(0x7f8a2987f288)
faces[0,1] = ARRAY(0x7f8a2987ea48)
faces[0,2] = ARRAY(0x7f8a29960b08)
faces[0,3] = ARRAY(0x7f8a2982d9c8)
$VAR1 = [
Bonjour.
Je vous invite à écrire un unique programme de test qui montre à la fois ces
deux sorties. Je soupçonne que l'effort d'y arriver vous permettra de
résoudre votre problème.
Bonjour,


Au vu de votre réponse, j'ai l'impression que vous avez compris mon
erreur. Je suis justement en train de faire des petits bouts de
programmes. Je continue mes tests ...

Un indice ? LOL
--
kurtz le pirate
compagnie de la banquise
Nicolas George
2024-01-18 16:24:16 UTC
Permalink
kurtz le pirate , dans le message
Post by kurtz le pirate
Au vu de votre réponse, j'ai l'impression que vous avez compris mon
erreur.
Non, j'ai essayé de la reproduire et je ne trouve pas la même chose, donc je
soupçonne qu'en remettant les choses soigneusement au propre vous la
trouverez tout seul, et à défaut d'autres pourront la trouver pour vous.
kurtz le pirate
2024-01-19 09:24:15 UTC
Permalink
Post by Nicolas George
kurtz le pirate , dans le message
Post by kurtz le pirate
Au vu de votre réponse, j'ai l'impression que vous avez compris mon
erreur.
Non, j'ai essayé de la reproduire et je ne trouve pas la même chose, donc je
soupçonne qu'en remettant les choses soigneusement au propre vous la
trouverez tout seul, et à défaut d'autres pourront la trouver pour vous.
Tout cela ne me rassure pas...

J'ai fais du propre et un programme avec le sctrict minimum.
Et toujours le même souci :(


J'ai aussi fais d'autres tests avec les exemples donnés la
<https://perl.mines-albi.fr/DocFr/perllol.html>
Et bien sûr tout est ok.


Vous n'avez rien dit par rapport à mon code. J'en déduis donc qu'il est bon.

Dernier point que je vais explorer : les données sont lues dans un
fichiers. Peut être quelque chose dans le fichier.

Merci



ps : c'est vraiment le désert ici :( dommage.
--
kurtz le pirate
compagnie de la banquise
Nicolas George
2024-01-19 18:43:59 UTC
Permalink
kurtz le pirate , dans le message
Post by kurtz le pirate
J'ai fais du propre et un programme avec le sctrict minimum.
Et toujours le même souci :(
Pouvez-vous montrer ce programme ?
Post by kurtz le pirate
Dernier point que je vais explorer : les données sont lues dans un
fichiers. Peut être quelque chose dans le fichier.
Pour les besoins du test, vous pouvez mettre les données après __DATA__ et
les lire en lisant <DATA>.
kurtz le pirate
2024-01-20 09:02:49 UTC
Permalink
Post by Nicolas George
kurtz le pirate , dans le message
Post by kurtz le pirate
J'ai fais du propre et un programme avec le sctrict minimum.
Et toujours le même souci :(
Pouvez-vous montrer ce programme ?
# ----------------------------------------------------------------------

#!/usr/bin/perl -w
use strict;
use warnings;
use File::Basename;

use Data::Dumper;

# --- 2024-01-15


# ----------------------------------------------------------------------
my $i;

my @vertex;
my @faces;

my @line;

# ----------------------------------------------------------------------
my $fullPath = shift;
my ($name, $dir, $ext) = fileparse($fullPath,'\..*');
printf ("name = $name\n");
printf ("dir = $dir\n");
printf ("ext = $ext\n\n");
chdir ($dir) or die "chdir error : $!\n";


# ----------------------------------------------------------------------
my $sourceFile="$name$ext";
print "* In file : $sourceFile\n\n";

my $povFile = $sourceFile;
$povFile = "$name.inc";
print "* Out file : $povFile\n\n";


# ----------------------------------------------------------------------
# push fake element to avoid zero' element
push @vertex,[-1,-1,-1];


# ----------------------------------------------------------------------
open (SOURCE,"<",$sourceFile) or die "Input file - Error openning
$sourceFile : $! !\n";
while(<SOURCE>) {

if( /^v/) {
# sample : v 4.29289322 -0.70710678 0.0000000e+0
@line = split ' ';
push @vertex,[$line[1],$line[2],$line[3]];
}

if( /^f/) {
# sample : f 527/598 528/600 331/368 330/366

# split on space
@line = split ' ';
print "1:";
print join("|", @line),"\nDumper:\n";
print Dumper @line;

# remove first item : 'f'
shift(@line);
print "2:";
print join("|", @line),"\nDumper:\n";
print Dumper @line;

# split on slash for all element of @line
@line = map { [split /\//] } @line;
print "3:";
print join("|", @line),"\nDumper:\n";
print Dumper @line;

# add array into array
push @faces, [@line];
}
print "---\n";
}
close (SOURCE);
exit(0);

print "\n\n\n*** Dumper \@faces\n";
print Dumper @faces;
print "\n\n\n";

print "\n\n\n*** loop \@faces\n";
for my $i ( 0 .. $#faces ) {
for my $j ( 0 .. $#{$faces[$i]} ) {
print "faces[$i,$j] = $faces[$i][$j]\n";
}
}

print "\n\n\n*** loop \@vertex\n";
for my $i ( 0 .. $#vertex ) {
for my $j ( 0 .. $#{$vertex[$i]} ) {
print "vertex[$i,$j] = $vertex[$i][$j]\n";
}
}
# ----------------------------------------------------------------------




Et le fichier de données :

# WaveFront *.obj file

g Lathe_NURBS
usemtl Mat
v 36.172029 288.758429 0
v 26.171929 288.758429 0
v 26.171929 285.758429 0

f 198/216 199/218 2/3 1/1
f 198/216 199/218 2/3
--
kurtz le pirate
compagnie de la banquise
kurtz le pirate
2024-01-20 09:38:57 UTC
Permalink
Post by Nicolas George
kurtz le pirate , dans le message
Post by kurtz le pirate
J'ai fais du propre et un programme avec le sctrict minimum.
Et toujours le même souci :(
Oooops, j'ai oublié le résultat :

1:f|198/216|199/218|2/3|1/1
Dumper:$VAR1 = 'f';
$VAR2 = '198/216';
$VAR3 = '199/218';
$VAR4 = '2/3';
$VAR5 = '1/1';
2:198/216|199/218|2/3|1/1
Dumper:$VAR1 = '198/216';
$VAR2 = '199/218';
$VAR3 = '2/3';
$VAR4 = '1/1';
3:ARRAY(0x7f9c5495ee68)|ARRAY(0x7f9c54856818)|ARRAY(0x7f9c5495f0a8)|ARRAY(0x7f9c5495f330)
Dumper:$VAR1 = [
'198',
'216'
];
$VAR2 = [
'199',
'218'
];
$VAR3 = [
'2',
'3'
];
$VAR4 = [
'1',
'1'
];
---
1:f|198/216|199/218|2/3
Dumper:$VAR1 = 'f';
$VAR2 = '198/216';
$VAR3 = '199/218';
$VAR4 = '2/3';
2:198/216|199/218|2/3
Dumper:$VAR1 = '198/216';
$VAR2 = '199/218';
$VAR3 = '2/3';
3:ARRAY(0x7f9c5495f2e8)|ARRAY(0x7f9c548569b0)|ARRAY(0x7f9c5495efe8)
Dumper:$VAR1 = [
'198',
'216'
];
$VAR2 = [
'199',
'218'
];
$VAR3 = [
'2',
'3'
];
---
Gosseyn
2024-01-19 20:48:51 UTC
Permalink
Post by kurtz le pirate
Vous n'avez rien dit par rapport à mon code. J'en déduis donc qu'il est bon.
C'est un dialogue de sourd ici. Je t'ai répondu aussi bien ici que par
mail. Ton code n'est pas bon. Et change aussi de serveur (news.free.fr)
car apparemment celui-ci ne reçoit pas tous les messages.

++
--
Alan JOBERT - ***@gosseyn.net
www.gosseyn.net
kurtz le pirate
2024-01-20 08:20:51 UTC
Permalink
Post by Gosseyn
Post by kurtz le pirate
Vous n'avez rien dit par rapport à mon code. J'en déduis donc qu'il est bon.
C'est un dialogue de sourd ici. Je t'ai répondu aussi bien ici que par
mail. Ton code n'est pas bon. Et change aussi de serveur (news.free.fr)
car apparemment celui-ci ne reçoit pas tous les messages.
++
heu.... rien vu de ta part ni ici, ni dans mon mail :(
je vais aller fouiller dans les spams "automatiques" de free.

oui, new.free.fr semble à la rue.
je vais chercher un serveur plus fiable pour la hiéarchie fr.comp
--
kurtz le pirate
compagnie de la banquise
Gosseyn
2024-01-20 08:27:27 UTC
Permalink
Post by kurtz le pirate
heu.... rien vu de ta part ni ici, ni dans mon mail :(
je vais aller fouiller dans les spams "automatiques" de free.
oui, new.free.fr semble à la rue.
je vais chercher un serveur plus fiable pour la hiéarchie fr.comp
Ton adresse e-mail "kurtzlepirate AT free.fr" est bonne ou pas du tout ?
Merci.
Je te renvoie à nouveau les messages.

++
--
Alan JOBERT - ***@gosseyn.net
www.gosseyn.net
kurtz le pirate
2024-01-20 15:16:00 UTC
Permalink
Post by Gosseyn
Post by kurtz le pirate
Vous n'avez rien dit par rapport à mon code. J'en déduis donc qu'il est bon.
C'est un dialogue de sourd ici. Je t'ai répondu aussi bien ici que par
mail. Ton code n'est pas bon. Et change aussi de serveur (news.free.fr)
car apparemment celui-ci ne reçoit pas tous les messages.
Je récupère maintenant les news depuis pasdenom sur la hiérarchie fr.

J'ai juste 50% de messages en plus dans tous mes abonnements !
Merci free...
--
Kurtz le pirate
Compagnie de la Banquise
Gosseyn
2024-01-20 16:26:21 UTC
Permalink
Post by kurtz le pirate
Je récupère maintenant les news depuis pasdenom sur la hiérarchie fr.
Welcome :-)
Post by kurtz le pirate
J'ai juste 50% de messages en plus dans tous mes abonnements !
Merci free...
Et ouais... :-(

++
--
Alan JOBERT - ***@gosseyn.net
www.gosseyn.net
Loading...