Prob E/S

Le
Orion93
Bonjour,

J'utilise une entrée standard de type:

open (Desc, "< extension.def");
while (<Desc>){
chomp;
$tabext{$_}='1';
}
close Desc;

mon probleme est que j'ai besoin d'utiliser le même type de fonction plus loin
dans mon prog dans un autre sub de cet facon:

open (Desc2, "< sources.def");
while (<Desc2>){
chomp;
$tabext2{$_}='1';
}
close Desc2;

Mon problème est qu'au lieu de réinitialiser la valeur de mon tableau, il
incremente au valeur precédemment charger (extension.def) les valeurs de sources.
def donc je me retrouve a traiter les valeurs extension.def et sources.def au
lieu de sources.def seulement.

D'où ma question: Est il possible de réinitialiser les valeurs de $_ pour régler
ce problème?

Merci



--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Scetbon Cyril
Le #121822
Orion93 wrote:
Bonjour,

J'utilise une entrée standard de type:

open (Desc, "< extension.def");
while (<Desc>){
chomp;
$tabext{$_}='1';
}
close Desc;

mon probleme est que j'ai besoin d'utiliser le même type de fonction plus loin
dans mon prog dans un autre sub de cet facon:

open (Desc2, "< sources.def");
while (<Desc2>){
chomp;
$tabext2{$_}='1';
}
close Desc2;

Mon problème est qu'au lieu de réinitialiser la valeur de mon tableau, il
incremente au valeur precédemment charger (extension.def) les valeurs de sources.
def donc je me retrouve a traiter les valeurs extension.def et sources.def au
lieu de sources.def seulement.
difficile à comprendre puisque tu utilises 2 hash différents. De toute

façon $_ prend la valeur de <Desc2> dans le deuxième passage, il n'y a
donc rien à réinitialiser.

tu peux t'expliquer un peu plus (ex de hash ?)

D'où ma question: Est il possible de réinitialiser les valeurs de $_ pour régler
ce problème?

Merci





Orion93
Le #121685
Pour moi aussi étant donné qu'il s'agit d'un autre hash il devrait prendre
uniquement les valeurs contenu dans le dernier fichier appelé...
Mais c'est pas le cas et je ne comprend pas pourquoi!

Merci pour toute info...

Sophie

#!/usr/bin/perl -w
use strict;
use Tk;
use Tk::Entry;
use File::Find;

my $main = MainWindow -> new;
$main -> title("Test 1");
$main -> Label(-text=>"Chemin:")->pack();
my $toto = $main -> Entry()->pack(-padx=>5);
$main -> Label(-text=>"Chemin avec fichier en txtn pour le résultat:")->pack();
#my $toto1 = $main -> Entry()->pack(-padx=>5);
$main->Button(-text=>'Ok',-command=>&listePages)->pack(-side=>'left', expand=>1,
-pady=>5);
$main->Button(-text=>'Fermer',-command=>sub {exit;})->pack(-side=>'right',
expand=>1,-pady=>1);
MainLoop();
my $i=0;
my %tabext;
my %tabext2;
my $tmp;
my $total=0;

sub listePages {
my $direct=$toto->get();
open (Desc, "< extension.def");
while (<Desc>){
chomp;
$tabext{$_}='1';
}
close Desc;
#Appel au module File::Find
find(&accounts, $direct);
sub accounts {
#my $ext1=$toto1->get();
open SORTIE,">> c:\test\appli.txt";
$File::Find::name =~ y/A-Z/a-z/;
$File::Find::name =~ /(.w*)$/;
my $ficext = $1;
my $taille;

#Pour effacer les repertoires
if (-d $File::Find::name) {
print SORTIE "nSoit $i Fichiers représentant ";
printf SORTIE "%.2f",$tmp;
print SORTIE " Kon";
print SORTIE

"n******************************************************************************
**************nNom du répertoire : $File::Find::name
n****************************************************nn";
$i=0;
$tmp=0;
}

#Pour effacer les fichiers ayant une extension défini dans extension.def
elsif (exists($tabext{$ficext})){
$i++;
$taille =(-s)/1024;
$File::Find::name =~ m/[\/]([^\/]*)$/;
print SORTIE "$1 ---> ";
printf SORTIE "%.2f",$taille;
print SORTIE " Kon";
$tmp=$tmp+$taille;
$total=$total+$taille;
}
}
print SORTIE " nSoit $i Fichiers représentant $tmp

Konn***************************************************************************
*****************nn";
print SORTIE "Soit un taille total de ";
printf SORTIE "%.2f",$total;
print SORTIE " Ko pour l'arborescence";
close SORTIE;
&listeautres;
}

sub listeautres {
my $direct=$toto->get();
open (Desc1, "< sources.def");
while (<Desc1>){
chomp;
$tabext{$_}='1';
}
close Desc1;

#Appel au module File::Find
find(&accounts2, $direct);

sub accounts2 {
#my $ext1=$toto1->get();
open SORTIE,">> c:\test\autres.txt";
$File::Find::name =~ y/A-Z/a-z/;
$File::Find::name =~ /(.w*)$/;
my $ficext1 = $1;
my $taille;
#Pour effacer les repertoires
if (-d $File::Find::name) {
print SORTIE "nSoit $i Fichiers représentant ";
printf SORTIE "%.2f",$tmp;
print SORTIE " Kon";
print SORTIE

"n******************************************************************************
**************nNom du répertoire : $File::Find::name
n****************************************************nn";
$i=0;
$tmp=0;
}

#Pour effacer les fichiers ayant une extension défini dans .def
elsif (exists($tabext{$ficext1})){
}

#Pour traiter les fichiers n'ayant pas une extension définie dans les
fichiers .def
else {
$i++;
$taille =(-s)/1024;
$File::Find::name =~ m/[\/]([^\/]*)$/;
print SORTIE "$1 ---> ";
printf SORTIE "%.2f",$taille;
print SORTIE " Kon";
$tmp=$tmp+$taille;
$total=$total+$taille;
}
}
print SORTIE " nSoit $i Fichiers représentant ";
printf SORTIE "%.2f",$tmp;
print SORTIE "

Konn***************************************************************************
*****************nn";
print SORTIE "Soit un taille total de ";
printf SORTIE "%.2f",$total;
print SORTIE " Ko pour l'arborescence";
close SORTIE;
&listesource;
}

sub listesource {
my $direct=$toto->get();
open (Desc2, "< sources.def");
while (<Desc2>){
chomp;
$tabext2{$_}='1';
}
close Desc2;

#Appel au module File::Find
find(&accounts3, $direct);

sub accounts3 {
#my $ext1=$toto1->get();
open SORTIE,">> c:\test\sources.txt";
$File::Find::name =~ y/A-Z/a-z/;
$File::Find::name =~ /(.w*)$/;
my $ficext2 = $1;
my $taille;

#Pour effacer les repertoires
if (-d $File::Find::name) {
print SORTIE "nSoit $i Fichiers représentant ";
printf SORTIE "%.2f",$tmp;
print SORTIE " Kon";
print SORTIE

"n******************************************************************************
**************nNom du répertoire : $File::Find::name
n****************************************************nn";
$i=0;
$tmp=0;
}

#Pour traiter les fichiers ayant une extension défini dans sources.def
elsif (exists($tabext{$ficext2})){
$i++;
$taille =(-s)/1024;
$File::Find::name =~ m/[\/]([^\/]*)$/;
print SORTIE "$1 ---> ";
printf SORTIE "%.2f",$taille;
print SORTIE " Kon";
$tmp=$tmp+$taille;
$total=$total+$taille;
}
}
print SORTIE " nSoit $i Fichiers représentant ";
printf SORTIE "%.2f",$tmp;
print SORTIE "

Konn***************************************************************************
*****************nn";
print SORTIE "Soit un taille total de ";
printf SORTIE "%.2f",$total;
print SORTIE " Ko pour l'arborescence";
close SORTIE;
}

Les fichiers en .def sont des listes d'extensions.
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/
Paul GABORIT
Le #121684
À (at) 05 May 2004 13:21:26 GMT,
Orion93
Pour moi aussi étant donné qu'il s'agit d'un autre hash il devrait prendre
uniquement les valeurs contenu dans le dernier fichier appelé...
Mais c'est pas le cas et je ne comprend pas pourquoi!

Merci pour toute info...


Vérifiez les différents endroits où vous utilisez vos deux tables de hachage
et vous verrez que vous mélangez les deux noms. Corrigez votre erreur. Puis
décidez à partir de maintenant de ne plus jamais utiliser deux noms qui ne se
différencient que par un '2' en suffixe. Et finalement, décidez de rendre vos
programmes modulaires en limitant la portée de vos variables (quand c'est
possible).

Exemple :

à la place de :

my %tabext;
my %tabext2;

dans un premier temps, utilisez :

my %extension_def;
my %source_def;

puis au final :

{
my %extension_def;
# ... utilisation de %extension_def
}

{
my %source_def;
# ... utilisation de %source_def
}

Et si le code se ressemble, factorisez :

sub f {
my $def_ref = shift;
# ... travail sur $def_ref->{...} ...
}

my %extension_def;
my %source_def;

f(%extension_def);
f(%source_def);

--
Paul Gaborit - Perl en français -
Publicité
Poster une réponse
Anonyme