Bonjour à vous deux,
Merci de vous être penché sur mon pb.
Lolo78, en effet cela doit piquer les yeux ce que j'ai marqué, en fait le début correspond à l'algo mis en place et à partir du if, c'est le code que j'ai retapé manuellement (je n'ai pas mon code source ici). Du coup il doit en effet y avoir bcp d'erreurs.
Jedaï, merci infiniment pour le code donné, ça m'a l'air vraiment optimum. Si vous avez un peu de temps encore à me consacrer, pourriez-vous me le détailler un petit peu SVP ? Notamment le
$handledIPStatus{shift @ipQueue} = 'None' for (1..@ipQueue > 5 ? 5 : @ipQueue);
Je comprends qu'il va mettre dans la hash table handledIPStatus chaque IP contenu dans le tableau ipQueue et mettre la valeur "None" à chaque key, mais j'ai du mal à saisir le sens du for, j'aurais eu tendance à dire que ça allait le faire pour les 5 premiers mais en testant chez moi, il me fait le traitement que 1 à 1 ou tout d'un coup si je charge l'ensemble des IPs dans le tableau, j'ai fait la chose suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
use strict;
my $status;
my @ligne=();
my @ipQueue=();
my %handledIPStatus;
open my $IN , "<", "D:\ip.txt" or die "Can't open le fichier : $!";
while( <$IN> ){
@ligne = split(',',$_);
push (@ipQueue,$ligne[0]);
$handledIPStatus{shift @ipQueue} = 'None' for (1..@ipQueue > 5 ? 5 : @ipQueue);
while( %handledIPStatus ) {
foreach my $ip (keys %handledIPStatus) {
if($handledIPStatus{$ip} eq 'None') {
#updateDBStatus($ip);
$handledIPStatus{$ip} = 'Queried';
next; # skip checking status for new ips
}
my $status = rechercheNewStatus($ip);
print "ID : l'état de $ip est $status";
if ($status eq "Done\n") {
delete $handledIPStatus{$ip};
$handledIPStatus{shift @ipQueue} = 'None' if @ipQueue;
}
}
sleep 3;
}
}
close($IN);
sub rechercheNewStatus {
my ($Aip) = @_;
my @l=();
open my $IN2 , "<", "D:\ip.txt" or die "Can't open le fichier : $!";
while( <$IN2> ){
#chop $_;
@l = split(',',$_);
if ($l[0] eq $Aip) {
return ($l[1]);
}
}
close ($IN2);
} |
En mettant ceci dans mon fichier text :
0.0.0.1,Done
0.0.0.2,Done
0.0.0.3,Todo
...
(je remplace à la main le status pour faire office de la fonction updateDBStatus).
Voyez-vous comment je peux charger les 5 premières IPs de mon fichier dans la hash table pour démarrer le traitement sur celles-ci SVP ?
Merci encore.
Partager