Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

array of array

5 views
Skip to first unread message

kurtz le pirate

unread,
Jan 15, 2024, 12:17:07 PM1/15/24
to

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

unread,
Jan 15, 2024, 6:37:41 PM1/15/24
to
Le 15/01/2024 à 18:17, kurtz le pirate a écrit :
> 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...

> 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.

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 - al...@gosseyn.net
www.gosseyn.net

Nicolas George

unread,
Jan 16, 2024, 3:20:02 PM1/16/24
to
kurtz le pirate , dans le message
<65a56892$0$3013$426a...@news.free.fr>, a écrit :
> 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 = [

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

unread,
Jan 18, 2024, 6:02:31 AM1/18/24
to
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

Nicolas George

unread,
Jan 18, 2024, 11:24:17 AM1/18/24
to
kurtz le pirate , dans le message
<65a90545$0$11915$426a...@news.free.fr>, a écrit :
> 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

unread,
Jan 19, 2024, 4:24:17 AM1/19/24
to
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.

Nicolas George

unread,
Jan 19, 2024, 1:44:01 PM1/19/24
to
kurtz le pirate , dans le message
<65aa3fbf$0$2586$426a...@news.free.fr>, a écrit :
> J'ai fais du propre et un programme avec le sctrict minimum.
> Et toujours le même souci :(

Pouvez-vous montrer ce programme ?

> 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>.

Gosseyn

unread,
Jan 19, 2024, 3:48:52 PM1/19/24
to
Le 19/01/2024 à 10:24, kurtz le pirate a écrit :

> 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.

kurtz le pirate

unread,
Jan 20, 2024, 3:20:53 AM1/20/24
to
On 19/01/2024 21:48, Gosseyn wrote:
> Le 19/01/2024 à 10:24, kurtz le pirate a écrit :
>
>> 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

Gosseyn

unread,
Jan 20, 2024, 3:27:29 AM1/20/24
to
Ton adresse e-mail "kurtzlepirate AT free.fr" est bonne ou pas du tout ?
Merci.
Je te renvoie à nouveau les messages.

kurtz le pirate

unread,
Jan 20, 2024, 4:02:50 AM1/20/24
to
On 19/01/2024 19:43, Nicolas George wrote:
> kurtz le pirate , dans le message
> <65aa3fbf$0$2586$426a...@news.free.fr>, a écrit :
>> 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

unread,
Jan 20, 2024, 4:38:58 AM1/20/24
to
On 20/01/2024 10:02, kurtz le pirate wrote:
> On 19/01/2024 19:43, Nicolas George wrote:
>> kurtz le pirate , dans le message
>> <65aa3fbf$0$2586$426a...@news.free.fr>, a écrit :
>>> 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'
];
---
>


kurtz le pirate

unread,
Jan 20, 2024, 10:16:02 AM1/20/24
to
On 19/01/2024 21:48, Gosseyn wrote:
> Le 19/01/2024 à 10:24, kurtz le pirate a écrit :
>
>> 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

unread,
Jan 20, 2024, 11:26:23 AM1/20/24
to
Le 20/01/2024 à 16:16, kurtz le pirate a écrit :
> Je récupère maintenant les news depuis pasdenom sur la hiérarchie fr.

Welcome :-)

> J'ai juste 50% de messages en plus dans tous mes abonnements !
> Merci free...

Et ouais... :-(
0 new messages