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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#! /usr/bin/perl -w
use diagnostics;
use strict;
my @matrice=();
my @matrice_propre=();
my @cible=();
my @ref=();
unless (scalar(@ARGV)==1)
{
die "erreur d'ouverture du fichier";
}
open (IN, $ARGV[0]);
while (<>)
{ my @donnees=split(/\s+/,$_);
@matrice=(@matrice,[@donnees]);
}
close IN;
@matrice_propre=supprime_undetermined(@matrice);
print afficher(@matrice_propre);
(@cible)=mat_cible(@matrice_propre);
print afficher(@cible);
exit;
#########==========================================================================================================########
# Crée une matrice contenant les informations demandées
#########==========================================================================================================########
sub creer_enregistrement
{
my($i,$c,$l,@m)=@_;
my $new_m;
my @new_m;
for (my $j = 0; $j < $c; $j++)
{
#print "la valeurs sont $i $c $l $m[$i][$j]\n";
$new_m[$l][$j]=$m[$i][$j];
}
return($l+1,@new_m);
}
#########==========================================================================================================########
# parcourt la matrice_propre et separe les elements cibles des elements de reference.
#renvoit la nouvelle matrice cible
#########==========================================================================================================########
sub mat_cible
{
my $l1=0;
my @m1=();
my (@m)=@_;
my($l, $c)=ligne_colonne(@m);
for (my $i = 1; $i < $l; $i++)
{
if($m[$i][3]=~/Target/gi)
{
($l1,@m1)=creer_enregistrement($i,$c,$l1,@m);
}
}
return @m1;
}
#########==========================================================================================================########
# Affiche tous les enregistrements de la matrice
#########==========================================================================================================########
sub afficher
{
my (@m)=@_;
my($ligne, $colonne)=ligne_colonne(@m);
for(my $i=0;$i<$ligne;$i++)
{
for (my $j=0;$j<$colonne;$j++)
{
print $m[$i][$j],"\t";
}
print"\n";
}
return;
}
#########==========================================================================================================########
#renvoie le nombre de lignes et le nombre de colonnes de la matrice
#########==========================================================================================================########
sub ligne_colonne
{
my (@m)=@_;
my ($l)=scalar(@m);
my ($c)=scalar(@{ $m[0]} );
print"ligne $l et colonne $c de la fonction \n";
return ($l,$c);
}
#########==========================================================================================================########
# parcourt la matrice et supprime tous les enregistrements comportant une valeur indéterminée
#renvoit la nouvelle matrice
#########==========================================================================================================########
sub supprime_undetermined
{
my (@m)=@_;
my($l, $c)=ligne_colonne(@m);
for (my $i = 0; $i < $l; $i++)
{
for ( my $j = 0; $j < $c; $j++)
{
if ($m[$i][$j]=~/Undetermined/gi)
{
($i,@m)=remonte_tuple($i,$l,$c,@m); #renvoie (i-1) et la matrice en construction
$l=$l-1;
}
}
}
return @m;
}
#########==========================================================================================================########
# Remonte les tuples suivant le tuple contenant la valeur "undertermined"jusqu'à l'indice de ce dernier
# Appelle la routine qui supprime le dernier élément de la matrice
#########==========================================================================================================########
sub remonte_tuple
{
my ($del,$l,$c,@m)=@_;
for (my $i = $del; $i < $l; $i++)
{
for (my $j = 0; $j < $c; $j++)
{
$m[$i][$j]=$m[$i+1][$j];
}
}
(@m)=retire_dernier_tuple(@m);
return ($del-1,@m);
}
#########==========================================================================================================########
# Retire le dernier élément de la matrice et le retour chariot et
#renvoie la matrice_propre
#########==========================================================================================================########
sub retire_dernier_tuple
{
my(@m)=@_;
my $sup=pop(@m);
$sup=pop(@m);
return @m;
} |
Partager