Discussion:
Reference Tableau associatif
(trop ancien pour répondre)
Apollo J
2017-02-06 23:09:05 UTC
Permalink
Bonjour,
J'utilise l'exemple de pelfertut ( http://perl.mines-albi.fr/DocFr/perlreftut.html) pour construire une structure de données.
Exple: J'ai 2 fichiers comme ça. On suppose que la variable $nom est unique, mais qu'il peut être dans plusieurs dpts.
NB : Exple non réél, il peut y avoir plusieurs chefs-lieux dans un même dpt.
Je voulais savoir s'il était possible de se passer de la table %Mem, çad de tout ranger dans %TabCoord.
Merci d'avance


Personnes.dat
------------------------------

nom, n°dpt
...
etc
------------------------------
et

Coord.dat
------------------------------

n°dpt, ville,chef-lieu, maire
.....
------------------------------


Voilà le code que j'ai écrit et qui fonctionne en perl v5.10

#!/usr/bin/perl

my %TabPersonnes;
my %TabCoord ;
my %Mem;


open(NOM_DPT,"Personnes.dat") or die "ouverture fichier $! impovilleible.\n";
open(COORD, "Coord.dat") or die "ouverture fichier $! impovilleible.\n";
open(SORTIE,"Sortie.dat") or die "ouverture fichier $! impovilleible.\n";

foreach $s (<NOM_DPT>)
{
chomp($s);
($nom,$dpt)=split(',',$s);
push @{$TabPersonnes{$dpt}},$nom;
}

foreach $d (<COORD>)
{
chomp($d);
($dpt,$ville,$cheflieu, $maire)=split(',',$d);
if ($dpt ne "") {
push @{$TabCoord{$dpt}},$ville;
$Mem{$ville}="$cheflieu,$maire\n";
}
}

foreach $dpt (sort keys %TabCoord) {
$n_Coord=@{$TabCoord{$dpt}}-1;
if (exists($TabPersonnes{$dpt})){
$n_Personnes=@{$TabPersonnes{$dpt}};
foreach my $i (0..$n_Coord) {
$ville = @{$TabCoord{$dpt}}[$i];
# NOM, dpt, ville,chef-lieu, maire
print SORTIE join ',',@{$TabPersonnes{$dpt}}[$i%$n_Personnes],$dpt,$ville,$Mem{$ville};
}
}
Marc Espie
2017-02-07 15:47:48 UTC
Permalink
Post by Apollo J
Bonjour,
J'utilise l'exemple de pelfertut (
http://perl.mines-albi.fr/DocFr/perlreftut.html) pour construire une
structure de données.
Exple: J'ai 2 fichiers comme ça. On suppose que la variable $nom est
unique, mais qu'il peut être dans plusieurs dpts.
NB : Exple non réél, il peut y avoir plusieurs chefs-lieux dans un même dpt.
Je voulais savoir s'il était possible de se passer de la table %Mem,
çad de tout ranger dans %TabCoord.
Merci d'avance
Pas trop, vu que c'est un cache pour ce que tu fais...

Note qu'il y a quand meme quelques trucs douteux cote style.

Et ton code ne fonctionne pas contrairement a ce que tu affirmes.
Post by Apollo J
Voilà le code que j'ai écrit et qui fonctionne en perl v5.10
#!/usr/bin/perl
my %TabPersonnes;
my %TabCoord ;
my %Mem;
open(NOM_DPT,"Personnes.dat") or die "ouverture fichier $! impovilleible.\n";
open(COORD, "Coord.dat") or die "ouverture fichier $! impovilleible.\n";
open(SORTIE,"Sortie.dat") or die "ouverture fichier $! impovilleible.\n";
- Tu m'expliqueras comment tu arrives a ecrire des trucs dans un fichier
ouvert en lecture.

- je te recommande chaudement use autodie; particulierement approprie pour
ce genre d'exemple.
Post by Apollo J
foreach $s (<NOM_DPT>)
- cette construction ne passe pas a l'echelle, vu qu'elle lit tout le fichier
en memoire.
while (defined ($s = <NOM_DPT>))
est la bonne construction
Post by Apollo J
{
chomp($s);
($nom,$dpt)=split(',',$s);
- si tu commences a declarer des variables, mets un use strict et declare-les
toutes.
Apollo J
2017-02-07 22:05:27 UTC
Permalink
Post by Marc Espie
Post by Apollo J
Bonjour,
J'utilise l'exemple de pelfertut (
http://perl.mines-albi.fr/DocFr/perlreftut.html) pour construire une
structure de données.
Exple: J'ai 2 fichiers comme ça. On suppose que la variable $nom est
unique, mais qu'il peut être dans plusieurs dpts.
NB : Exple non réél, il peut y avoir plusieurs chefs-lieux dans un même dpt.
Je voulais savoir s'il était possible de se passer de la table %Mem,
çad de tout ranger dans %TabCoord.
Merci d'avance
Pas trop, vu que c'est un cache pour ce que tu fais...
Ok, je pensais que l'on pouvait utiliser un tableau, c'est vraiment cette partie qui m'intéresse. Merci quand même.
Post by Marc Espie
Note qu'il y a quand meme quelques trucs douteux cote style.
Oui, désolé, c'est écrit vite fait ..Désolé pour le style, j'ai changé, "anonymisé"aussi qq variables .(CTRL-H trop gourmand!)
Post by Marc Espie
Et ton code ne fonctionne pas contrairement a ce que tu affirmes.
Post by Apollo J
Voilà le code que j'ai écrit et qui fonctionne en perl v5.10
#!/usr/bin/perl
my %TabPersonnes;
my %TabCoord ;
my %Mem;
open(NOM_DPT,"Personnes.dat") or die "ouverture fichier $! impovilleible.\n";
open(COORD, "Coord.dat") or die "ouverture fichier $! impovilleible.\n";
open(SORTIE,"Sortie.dat") or die "ouverture fichier $! impovilleible.\n";
- Tu m'expliqueras comment tu arrives a ecrire des trucs dans un fichier
ouvert en lecture.
- je te recommande chaudement use autodie; particulierement approprie pour
ce genre d'exemple.
Post by Apollo J
foreach $s (<NOM_DPT>)
- cette construction ne passe pas a l'echelle, vu qu'elle lit tout le fichier
en memoire.
while (defined ($s = <NOM_DPT>))
est la bonne construction
Post by Apollo J
{
chomp($s);
($nom,$dpt)=split(',',$s);
- si tu commences a declarer des variables, mets un use strict et declare-les
toutes.
Continuer la lecture sur narkive:
Loading...