Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Reference Tableau associatif

2 réponses
Avatar
Apollo J
Bonjour,
J'utilise l'exemple de pelfertut ( http://perl.mines-albi.fr/DocFr/perlref=
tut.html) pour construire une structure de donn=C3=A9es.
Exple: J'ai 2 fichiers comme =C3=A7a. On suppose que la variable $nom est=
unique, mais qu'il peut =C3=AAtre dans plusieurs dpts.
NB : Exple non r=C3=A9=C3=A9l, il peut y avoir plusieurs chefs-lieux dans u=
n m=C3=AAme dpt.
Je voulais savoir s'il =C3=A9tait possible de se passer de la table %Mem, =
=C3=A7ad de tout ranger dans %TabCoord.
Merci d'avance


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

nom, n=C2=B0dpt
...
etc
------------------------------
et

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

n=C2=B0dpt, ville,chef-lieu, maire
.....
------------------------------


Voil=C3=A0 le code que j'ai =C3=A9crit 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)=3Dsplit(',',$s);
push @{$TabPersonnes{$dpt}},$nom;
}

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

foreach $dpt (sort keys %TabCoord) {
$n_Coord=3D@{$TabCoord{$dpt}}-1;
if (exists($TabPersonnes{$dpt})){
$n_Personnes=3D@{$TabPersonnes{$dpt}};
foreach my $i (0..$n_Coord) {
$ville =3D @{$TabCoord{$dpt}}[$i];
# NOM, dpt, ville,chef-lieu, maire
print SORTIE join ',',@{$TabPersonnes{$dpt}}[$i%$n_Personnes],$=
dpt,$ville,$Mem{$ville};
}
}

2 réponses

Avatar
espie
In article ,
Apollo J wrote:
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.
Avatar
Apollo J
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.