laisso  | gilou a écrit :
 
 On peut améliorer un peut ça:
  Code :
 #!/usr/bin/perl use strict; use warnings; use autodie;   my @infos = (          {title =>  "1.a : lignes contenant des chiffres ou des majuscules", regexp =>  qr/ [0-9A-Z ]/  },           {title =>  "1.b : lignes contenant des points" , regexp =>  qr/\./ },           {title =>  "1.c : lignes contenant trois points", regexp =>  qr/\. {3}/ },           {title =>  "1.d : lignes contenant des nombres hexadecimaux separes par des blancs", regexp =>  qr/ (^|\ s)[0-9A-F ]+ (\s|$ )/i },           {title =>  "1.e : lignes contenant un mot d/au moins 12 caracteres alphanumeriques", regexp =>  qr/ (^|\ s)[0-9A-Z ]{12, }(\s|$ )/i },           {title =>  "1.f : lignes contenant exactement 5 lettres a (pas nécessairement successives)", regexp =>  qr/^ ([^a ]*a ){5}[^a ]*$/ },           {title =>  "1.g : lignes contenant des crochets ( ] ou [ )", regexp =>  qr/\ [|\ ]/ },           {title =>  "1.h : lignes ne contenant que des lettres a et des espaces ", regexp =>  qr/^ [a\ s]+$/ },           {title =>  "1.i : lignes contenant quelque chose qui ressemble a une adresse IP", regexp =>  qr/\d {1, 3}(\.\d {1, 3}){3}/ },           {title =>  "2.a : lignes vides", regexp =>  qr/^$/ },           {title =>  "2.b : lignes blanches", regexp =>  qr/^\ s+$/ },           {title =>  "2.c : lignes non vides", regexp =>  qr/^.+$/ },           {title =>  "3.a : lignes qui ne contiennent pas de a", regexp =>  qr/^ [^a ]*$/ },           {title =>  "3.b : lignes qui ne contiennent pas des espaces", regexp =>  qr/^\S*$/ },           {title =>  "3.c : lignes qui ne contiennent pas des chiffres décimaux", regexp =>  qr/^ [^ 0-9]*$/ },           {title =>  "4 : lignes qui débutent par un numéro de téléphone au format 01 23 45 67 89", regexp =>  qr/^\d {2}(\ s\d {2}){4}/ },           {title =>  "5 : idem 4 mais on peut avoir . ou - a la place des espaces", regexp =>  qr/^\d {2}([-\ s\. ]\d {2}){4}/ },           # {title => "6 : idem 5 mais le 0 peut être entoure de parentheses", regexp => qr/^(\(0\)|\d)\d([-\s\.]\d{2}){4}/},          # au vu de son exemple, doit commencer par 0          {title =>  "6 : idem 5 mais le 0 peut être entoure de parentheses", regexp =>  qr/^ (\ (0\ )| 0)\d ([-\ s\. ]\d {2}){4}/ },           {title =>  "7 : terminent par un tel au format 0 123 456 789, espaces, - ou . et (0)", regexp =>  qr/ (\ (0\ )| 0)([-\ s\. ]\d {3}){3}$/ }         );   sub afficheTitre {   my $stars =  "*" x  length($titre);  }   sub afficheLignes {   my $stars = "*" x 5;   my @lines =  grep / $regexp/,  @_;    print "$stars ",  scalar(@lines),  " lignes trouvees $stars\n";  }   open my $fin,  "<",  "laisso.txt";  my @lines = <$fin>;   afficheTitre("PERL : Fichier de sortie de l'exercice 2 du TP4" ); foreach (@infos) {   afficheTitre($_->{title});   afficheLignes($_->{regexp}, @lines); } 
 
  |  
 
   A+,
   |  
 
  
  Code :
 - #!/usr/bin/perl
 - use strict;
 - use warnings;
 - use autodie;
 - my @infos = (
 -          {title => "1.a : lignes contenant des chiffres ou des majuscules", regexp => qr/[0-9A-Z]/ },
 -          {title => "1.b : lignes contenant des points" , regexp => qr/\./},
 -          {title => "1.c : lignes contenant trois points", regexp => qr/\.{3}/},
 -          {title => "1.d : lignes contenant des nombres hexadecimaux separes par des blancs", regexp => qr/(^|\s)[0-9A-F]+(\s|$)/i},
 -          {title => "1.e : lignes contenant un mot d/au moins 12 caracteres alphanumeriques", regexp => qr/(^|\s)[0-9A-Z]{12,}(\s|$)/i},
 -          {title => "1.f : lignes contenant exactement 5 lettres a (pas nécessairement successives)", regexp => qr/^([^a]*a){5}[^a]*$/},
 -          {title => "1.g : lignes contenant des crochets ( ] ou [ )", regexp => qr/\[|\]/},
 -          {title => "1.h : lignes ne contenant que des lettres a et des espaces ", regexp => qr/^[a\s]+$/},
 -          {title => "1.i : lignes contenant quelque chose qui ressemble a une adresse IP", regexp => qr/\d{1,3}(\.\d{1,3}){3}/},
 -          {title => "2.a : lignes vides", regexp => qr/^$/},
 -          {title => "2.b : lignes blanches", regexp => qr/^\s+$/},
 -          {title => "2.c : lignes non vides", regexp => qr/^.+$/},
 -          {title => "3.a : lignes qui ne contiennent pas de a", regexp => qr/^[^a]*$/},
 -          {title => "3.b : lignes qui ne contiennent pas des espaces", regexp => qr/^\S*$/},
 -          {title => "3.c : lignes qui ne contiennent pas des chiffres décimaux", regexp => qr/^[^0-9]*$/},
 -          {title => "4 : lignes qui débutent par un numéro de téléphone au format 01 23 45 67 89", regexp => qr/^\d{2}(\s\d{2}){4}/},
 -          {title => "5 : idem 4 mais on peut avoir . ou - a la place des espaces", regexp => qr/^\d{2}([-\s\.]\d{2}){4}/},
 -          # {title => "6 : idem 5 mais le 0 peut être entoure de parentheses", regexp => qr/^(\(0\)|\d)\d([-\s\.]\d{2}){4}/},
 -          # au vu de son exemple, doit commencer par 0
 -          {title => "6 : idem 5 mais le 0 peut être entoure de parentheses", regexp => qr/^(\(0\)|0)\d([-\s\.]\d{2}){4}/},
 -          {title => "7 : terminent par un tel au format 0 123 456 789, espaces, - ou . et (0)", regexp => qr/(\(0\)|0)([-\s\.]\d{3}){3}$/}
 -         );
 - sub afficheTitre {
 -  my $titre = shift;
 -  my $stars = "*" x length($titre);
 -  print $stars, "\n";
 -  print $titre, "\n";
 -  print $stars, "\n";
 - }
 - sub afficheLignes {
 -  my $stars = "*" x 5;
 -  my $regexp = shift;
 -  my @lines = grep /$regexp/, @_;
 -  map {print "$_\n"} @lines;
 -  print "$stars ", scalar(@lines), " lignes trouvees $stars\n";
 - }
 - open my $fin, "<", "RegExpTP4_Ex2.txt";
 - my @lines = <$fin>;
 - chomp @lines;
 - close $fin;
 - open (RAPPORT, ">>SortieRegExpTP4_Ex2.txt" );
 - afficheTitre("PERL : Fichier de sortie de l'exercice 2 du TP4" );
 - foreach (@infos) {
 -  print "\n";
 -  afficheTitre($_->{title});
 -  afficheLignes($_->{regexp}, @lines);
 
  |  
 
   Il y a un fichier entrée et un fichier de sortie, j'ai donc rajouter une ligne avec les nons des 2 fichiers. Qu'en pensez vous?
   Merci de votre aide!
     |