Problème sur l'entame de ce code - Perl - Programmation
Marsh Posté le 07-01-2015 à 20:51:08
Et il est ou le début de ton code?
Parce que poster un exo en priant qu'on fasse le boulot à ta place, ça marche pas ici.
A+,
Marsh Posté le 07-01-2015 à 22:45:55
gilou a écrit : Et il est ou le début de ton code? |
Bsr, je suis désolée. Je voulais seulement avoir la méthodologie pour résoudre cet exercice au vue de mes difficultés.
Code :
|
J'ai ce début de code, qui me permet de classer les fichiers par type.
Marsh Posté le 08-01-2015 à 05:10:38
Sauf que ton début de code, c'est un peu n'importe quoi, et surtout, ça n'essaye pas de répondre à ton exercice.
Code :
|
Un truc comme ça devrait le faire, j'ai pas vérifié toutes les regexp.
Au fait, son énoncé pour
6 : idem 5 mais le 0 peut être entoure de parentheses
est faux vis a vis de sa sortie exemple (il ne fait pas idem 5 mais ne choisit que ceux démarrant par 0 ou (0))
A+,
Marsh Posté le 08-01-2015 à 12:10:01
Les deux trucs que tu ne connais peut être pas et qui simplifient la vie ici:
1) @lines = <$fin>;
ça remplit @lines avec les lignes du fichier ouvert de handle $fin.
A ne pas employer avec un fichier trop gros pour tenir en mémoire (mais on en est bien bien loin ici)
2) @searched = grep /$regexp/, @lines;
remplit @searched avec les lignes de @lines qui matchent l'expression régulière $regexp
Pour le reste, tout était dans l'énoncé:
On bouclait sur un certain nombre de titres, pour chaque titre, on l'affiche avec une fonction afficheTitre à écrire, et on filtre les lignes qui matchent une certaine expression régulière et on les affiche avec une fonction afficheLignes à écrire
A+,
Marsh Posté le 08-01-2015 à 15:51:38
On peut améliorer un peut ça:
Code :
|
A+,
Marsh Posté le 10-01-2015 à 13:22:50
gilou a écrit : On peut améliorer un peut ça:
|
Code :
|
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!
Marsh Posté le 10-01-2015 à 14:19:30
gilou a écrit : On peut améliorer un peut ça:
|
Code :
|
J'ai rajouté une ligne pour la vérification du fichier de sortie avec celui de l'entrée. Qu'en pensez vous?
Marsh Posté le 10-01-2015 à 17:23:20
Je pense que ça va pas servir a grand chose, tel que c'est fait la.
A+,
Marsh Posté le 07-01-2015 à 20:46:25
On teste les réponses de l'exercice 1 en scannant un fichier d'entrée et en produisant un fichier de sortie.
Fichier d'entrée : RegExpTP4_Ex2.txt.
Fichier de sortie : SortieRegExpTP4_Ex2.txt. Ce fichier de sortie est à votre disposition.
Lorsque vous rendrez le script, nous le lancerons et devrons trouver exactement le même fichier de sortie.
Vous rendrez un dossier compressé contenant votre script nommé TP4_Exo2.pl et le fichier d'entrée. Nous lancerons le script qui produira le fichier de sortie dans le même dossier, il portera le nom indiqué plus haut. Il ne nous restera plus qu'à vérifier que votre fichier de sortie coïncide rigoureusement avec celui fourni.
Factorisation du code.
On attend deux fonctions afficheTitre et afficheLignes
afficheTitre attend le titre à afficher pour chaque item :
afficheTitre("1.g : lignes contenant des crochets ( ] ou [ )" );
et produit l'affichage correspondant :
**********************************************
1.g : lignes contenant des crochets ( ] ou [ )
**********************************************
(Lignes 145 à 147 du fichier de sortie).
Il y a autant d'étoiles que de caractères au-dessus et en-dessous de la ligne à afficher. Copiez les 3 lignes dans un éditeur de textes basique et vous verrez que c'est vrai ;-).
afficheLignes attend l'expression régulière et la liste des lignes à tester :
afficheLignes('[\[]|[\]]',@lignes);
# RegExp entre quottes, c'est plus lisible qu'avec guillemets
et produit l'affichage correspondant :
cette ligne contient des [
] cette ligne aussi
capitaine [] est tres mechant
***** 3 lignes trouvees *****
(lignes 148 à 151 du fichier de sortie).
cette ligne ne contient ni chiffre ni majuscule
Cette ligne contient 1 chiffre et une majuscule
Celle ci ne contient qu'une majuscule
celle ci ne contient que le chiffre 9 et pas de majuscule
4444
MMMM
Aaa4
zz lm :
Cette ligne termine par un point.
C'est dur...
. premiere partie
on fait le . ?
..
cette ligne contient 3 points ......
cette ligne . ne contient pas . la ponctuation 3 points.
Un nombre hexadecimal : AE456
FFF est un hexadecimal
cette ligne contient 124EF il est hexadecimal
voila un mot qui contient au moins 12 caracteres alphanumeriques 1a2bc3d4e5f6
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
Voila un mot 1a2bc3d4e5f6g7 il contient 14 caracteres alphanumeriques
1a2bc3d4e5 a 10 caracteres
cette ligne a contient a 5 fois a la lettre a
aaaaaaaaaaaaaaa
cette ligne contient des [
] cette ligne aussi
capitaine [] est tres mechant
la ligne suivante ne contient que des espaces
la ligne suivante ne contient que des a et des espaces
a a a a aaaa aa
Ceci ressemble a une adresse IP : 123.456.789.145
Ceci aussi : 12.456.7.14
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
2369.235.26.158963 ressemble malheureusement a une IP
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
12.13.14.58.96
78 96 32 85 41fgtr
01-23-45-67-89
Tel : 41 52 69 78 56
(0)1-23-45-67-89
Tel : (0)1 52 69 78 56
(1)2 36 98 74 56 12
(0)2.13.14.58.96
(0)1 24 58 96 52
(1)2.13.14.58.96
(0)123456
toto (0) 123 456 789
toto (0) 123 456 789 titi
bisous
toto (0) 123.456-789
toto (1) 123-456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 1 123-456-789
toto 0 123.456.789
***********************************************
PERL : Fichier de sortie de l'exercice 2 du TP4
***********************************************
*****************************************************
1.a : lignes contenant des chiffres ou des majuscules
*****************************************************
LP ASR
PERL
Fichier test pour les expressions regulieres
Auteur : GB
Revision : 11/11/2010
Cette ligne contient 1 chiffre et une majuscule
Celle ci ne contient qu'une majuscule
celle ci ne contient que le chiffre 9 et pas de majuscule
4444
MMMM
Aaa4
Cette ligne termine par un point.
C'est dur...
cette ligne contient 3 points ......
cette ligne . ne contient pas . la ponctuation 3 points.
Un nombre hexadecimal : AE456
FFF est un hexadecimal
cette ligne contient 124EF il est hexadecimal
voila un mot qui contient au moins 12 caracteres alphanumeriques 1a2bc3d4e5f6
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
Voila un mot 1a2bc3d4e5f6g7 il contient 14 caracteres alphanumeriques
1a2bc3d4e5 a 10 caracteres
cette ligne a contient a 5 fois a la lettre a
Ceci ressemble a une adresse IP : 123.456.789.145
Ceci aussi : 12.456.7.14
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
2369.235.26.158963 ressemble malheureusement a une IP
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
12.13.14.58.96
78 96 32 85 41fgtr
01-23-45-67-89
Tel : 41 52 69 78 56
(0)1-23-45-67-89
Tel : (0)1 52 69 78 56
(1)2 36 98 74 56 12
(0)2.13.14.58.96
(0)1 24 58 96 52
(1)2.13.14.58.96
(0)123456
toto (0) 123 456 789
toto (0) 123 456 789 titi
toto (0) 123.456-789
toto (1) 123-456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 1 123-456-789
toto 0 123.456.789
***** 50 lignes trouvees *****
*********************************
1.b : lignes contenant des points
*********************************
Cette ligne termine par un point.
C'est dur...
. premiere partie
on fait le . ?
..
cette ligne contient 3 points ......
cette ligne . ne contient pas . la ponctuation 3 points.
Ceci ressemble a une adresse IP : 123.456.789.145
Ceci aussi : 12.456.7.14
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
2369.235.26.158963 ressemble malheureusement a une IP
12.13.14.58.96
(0)2.13.14.58.96
(1)2.13.14.58.96
toto (0) 123.456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 0 123.456.789
***** 19 lignes trouvees *****
***********************************
1.c : lignes contenant trois points
***********************************
C'est dur...
cette ligne contient 3 points ......
***** 2 lignes trouvees *****
**********************************************************************
1.d : lignes contenant des nombres hexadecimaux separes par des blancs
**********************************************************************
Cette ligne contient 1 chiffre et une majuscule
celle ci ne contient que le chiffre 9 et pas de majuscule
4444
Aaa4
cette ligne contient 3 points ......
cette ligne . ne contient pas . la ponctuation 3 points.
Un nombre hexadecimal : AE456
FFF est un hexadecimal
cette ligne contient 124EF il est hexadecimal
voila un mot qui contient au moins 12 caracteres alphanumeriques 1a2bc3d4e5f6
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
Voila un mot 1a2bc3d4e5f6g7 il contient 14 caracteres alphanumeriques
1a2bc3d4e5 a 10 caracteres
cette ligne a contient a 5 fois a la lettre a
aaaaaaaaaaaaaaa
la ligne suivante ne contient que des a et des espaces
a a a a aaaa aa
Ceci ressemble a une adresse IP : 123.456.789.145
2369.235.26.158963 ressemble malheureusement a une IP
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
78 96 32 85 41fgtr
Tel : 41 52 69 78 56
Tel : (0)1 52 69 78 56
(1)2 36 98 74 56 12
(0)1 24 58 96 52
toto (0) 123 456 789
toto (0) 123 456 789 titi
toto 0 123.456-789
toto 1 123-456-789
toto 0 123.456.789
***** 32 lignes trouvees *****
**********************************************************************
1.e : lignes contenant un mot d'au moins 12 caracteres alphanumeriques
**********************************************************************
voila un mot qui contient au moins 12 caracteres alphanumeriques 1a2bc3d4e5f6
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
Voila un mot 1a2bc3d4e5f6g7 il contient 14 caracteres alphanumeriques
aaaaaaaaaaaaaaa
2369.235.26.158963 ressemble malheureusement a une IP
***** 5 lignes trouvees *****
*******************************************************************************
1.f : lignes contenant exactement 5 lettres a (pas nécessairement successives)
*******************************************************************************
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
cette ligne a contient a 5 fois a la lettre a
***** 2 lignes trouvees *****
**********************************************
1.g : lignes contenant des crochets ( ] ou [ )
**********************************************
cette ligne contient des [
] cette ligne aussi
capitaine [] est tres mechant
***** 3 lignes trouvees *****
**********************************************************
1.h : lignes ne contenant que des lettres a et des espaces
**********************************************************
aaaaaaaaaaaaaaa
a a a a aaaa aa
***** 3 lignes trouvees *****
*******************************************************************
1.i : lignes contenant quelque chose qui ressemble a une adresse IP
*******************************************************************
Ceci ressemble a une adresse IP : 123.456.789.145
Ceci aussi : 12.456.7.14
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
2369.235.26.158963 ressemble malheureusement a une IP
12.13.14.58.96
(0)2.13.14.58.96
(1)2.13.14.58.96
***** 8 lignes trouvees *****
******************
2.a : lignes vides
******************
***** 4 lignes trouvees *****
*********************
2.b : lignes blanches
*********************
***** 1 lignes trouvees *****
**********************
2.c : lignes non vides
**********************
**********************************************
LP ASR
PERL
Fichier test pour les expressions regulieres
Auteur : GB
Revision : 11/11/2010
***********************************************
cette ligne ne contient ni chiffre ni majuscule
Cette ligne contient 1 chiffre et une majuscule
Celle ci ne contient qu'une majuscule
celle ci ne contient que le chiffre 9 et pas de majuscule
4444
MMMM
Aaa4
zz lm :
Cette ligne termine par un point.
C'est dur...
. premiere partie
on fait le . ?
..
cette ligne contient 3 points ......
cette ligne . ne contient pas . la ponctuation 3 points.
Un nombre hexadecimal : AE456
FFF est un hexadecimal
cette ligne contient 124EF il est hexadecimal
voila un mot qui contient au moins 12 caracteres alphanumeriques 1a2bc3d4e5f6
1a2bc3d4e5f6g7 est un mot qui contient 14 caracteres alphanumeriques
Voila un mot 1a2bc3d4e5f6g7 il contient 14 caracteres alphanumeriques
1a2bc3d4e5 a 10 caracteres
cette ligne a contient a 5 fois a la lettre a
aaaaaaaaaaaaaaa
cette ligne contient des [
] cette ligne aussi
capitaine [] est tres mechant
la ligne suivante ne contient que des espaces
la ligne suivante ne contient que des a et des espaces
a a a a aaaa aa
Ceci ressemble a une adresse IP : 123.456.789.145
Ceci aussi : 12.456.7.14
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
2369.235.26.158963 ressemble malheureusement a une IP
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
12.13.14.58.96
78 96 32 85 41fgtr
01-23-45-67-89
Tel : 41 52 69 78 56
(0)1-23-45-67-89
Tel : (0)1 52 69 78 56
(1)2 36 98 74 56 12
(0)2.13.14.58.96
(0)1 24 58 96 52
(1)2.13.14.58.96
(0)123456
toto (0) 123 456 789
toto (0) 123 456 789 titi
bisous
toto (0) 123.456-789
toto (1) 123-456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 1 123-456-789
toto 0 123.456.789
***** 66 lignes trouvees *****
****************************************
3.a : lignes qui ne contiennent pas de a
****************************************
**********************************************
LP ASR
PERL
Fichier test pour les expressions regulieres
Auteur : GB
Revision : 11/11/2010
***********************************************
4444
MMMM
zz lm :
C'est dur...
..
cette ligne contient 3 points ......
cette ligne contient des [
1.45.9.14 est une IP
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
12.13.14.58.96
78 96 32 85 41fgtr
01-23-45-67-89
Tel : 41 52 69 78 56
(0)1-23-45-67-89
Tel : (0)1 52 69 78 56
(1)2 36 98 74 56 12
(0)2.13.14.58.96
(0)1 24 58 96 52
(1)2.13.14.58.96
(0)123456
toto (0) 123 456 789
toto (0) 123 456 789 titi
bisous
toto (0) 123.456-789
toto (1) 123-456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 1 123-456-789
toto 0 123.456.789
***** 44 lignes trouvees *****
***********************************************
3.b : lignes qui ne contiennent pas des espaces
***********************************************
**********************************************
PERL
***********************************************
4444
MMMM
Aaa4
..
aaaaaaaaaaaaaaa
totoAUneIPfixeQuiEst1.369.258.14IlEnEstContent
12.13.14.58.96
01-23-45-67-89
(0)1-23-45-67-89
(0)2.13.14.58.96
(1)2.13.14.58.96
(0)123456
bisous
***** 20 lignes trouvees *****
**********************************************************
3.c : lignes qui ne contiennent pas des chiffres décimaux
**********************************************************
**********************************************
LP ASR
PERL
Fichier test pour les expressions regulieres
Auteur : GB
***********************************************
cette ligne ne contient ni chiffre ni majuscule
Celle ci ne contient qu'une majuscule
MMMM
zz lm :
Cette ligne termine par un point.
C'est dur...
. premiere partie
on fait le . ?
..
FFF est un hexadecimal
aaaaaaaaaaaaaaa
cette ligne contient des [
] cette ligne aussi
capitaine [] est tres mechant
la ligne suivante ne contient que des espaces
la ligne suivante ne contient que des a et des espaces
a a a a aaaa aa
bisous
***** 29 lignes trouvees *****
*******************************************************************************
4 : lignes qui débutent par un numéro de téléphone au format 01 23 45 67 89
*******************************************************************************
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
78 96 32 85 41fgtr
***** 4 lignes trouvees *****
***********************************************************
5 : idem 4 mais on peut avoir . ou - a la place des espaces
***********************************************************
01 24 58 96 52
41 52 69 78 56
12 36 98 74 56 12
12.13.14.58.96
78 96 32 85 41fgtr
01-23-45-67-89
***** 6 lignes trouvees *****
******************************************************
6 : idem 5 mais le 0 peut être entoure de parentheses
******************************************************
01 24 58 96 52
01-23-45-67-89
(0)1-23-45-67-89
(0)2.13.14.58.96
(0)1 24 58 96 52
***** 5 lignes trouvees *****
************************************************************************
7 : terminent par un tel au format 0 123 456 789, espaces, - ou . et (0)
************************************************************************
toto (0) 123 456 789
toto (0) 123.456-789
toto (0) 123.456.789
toto 0 123.456-789
toto 0 123.456.789
***** 5 lignes trouvees *****