Reference Tableau associatif

Le
Apollo J
Bonjour,
J'utilise l'exemple de pelfertut ( http://perl.mines-albi.fr/DocFr/perlref=
tut.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 u=
n 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.";
open(SORTIE,"Sortie.dat") or die "ouverture fichier $! impovilleible.";

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";
}
}

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};
}
}
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #26425510
In article 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.
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.
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
{
chomp($s);
($nom,$dpt)=split(',',$s);

- si tu commences a declarer des variables, mets un use strict et declare-les
toutes.
Apollo J
Le #26425542
Le mardi 7 février 2017 16:47:49 UTC+1, Marc Espie a écrit :
In article
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 dan s 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 p artie qui m'intéresse. Merci quand même.
Note qu'il y a quand meme quelques trucs douteux cote style.

Oui, désolé, c'est écrit vite fait ..Désolé pour l e style, j'ai changé, "anonymisé"aussi qq variables .(CTRL-H trop gourmand!)
Et ton code ne fonctionne pas contrairement a ce que tu affirmes.

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 $! impovilleibl e.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 pou r
ce genre d'exemple.
foreach $s (<NOM_DPT>)

- cette construction ne passe pas a l'echelle, vu qu'elle lit tout le fic hier
en memoire.
while (defined ($s = <NOM_DPT>))
est la bonne construction
{
chomp($s);
($nom,$dpt)=split(',',$s);

- si tu commences a declarer des variables, mets un use strict et declare -les
toutes.
Publicité
Poster une réponse
Anonyme