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!
|