Apprentissage de Perl
Résolu/Fermé
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
-
12 nov. 2007 à 00:42
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 18 nov. 2007 à 22:44
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 18 nov. 2007 à 22:44
A voir également:
- Apprentissage de Perl
- Denon perl pro test - Accueil - Audio
- Telecharger logiciel d'apprentissage du clavier gratuit - Télécharger - Divers Bureautique
- Apprentissage informatique 16 ans ✓ - Forum Études / Formation High-Tech
- Pré-apprentissage a 13 ans ✓ - Forum Études / Formation High-Tech
- Apprentissage solfege piano - Télécharger - Création musicale
12 réponses
mindslight
Messages postés
87
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
29 octobre 2009
12
12 nov. 2007 à 09:57
12 nov. 2007 à 09:57
Bonjour,
Oui, c'est possible, mais je ne suis pas expert dans le domaine,
je préfère donc pas te donner des mauvais conseils.
Il faut malheureusement, que tu attendes que quelqu'un de
plus expérimenté que moi te répondre.
Oui, c'est possible, mais je ne suis pas expert dans le domaine,
je préfère donc pas te donner des mauvais conseils.
Il faut malheureusement, que tu attendes que quelqu'un de
plus expérimenté que moi te répondre.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
12 nov. 2007 à 11:06
12 nov. 2007 à 11:06
Salut,
Avec Perl on peut faire beaucoup des choses.
Il ne faut pas oublier qu'il y a le CPAN (Comprehensive Perl Archive Network) où on peut trouver pas mal de modules qui ferront le travail à notre place (j'ai oublié de dire que les perliens ce sont des paresseux - tu veux toujours apprendre Perl ;-))
Pour accèder aux bases de données il y a plusieurs modules
DBI
Class::DBI::MSAccess
DBD::ODBC
pour convertire une base Access vers une autre base DBIx::MSAccess::Convert2Db
pour les drivers
DBI::DBD
Voilà pour la question ;-))
Avec Perl on peut faire beaucoup des choses.
Il ne faut pas oublier qu'il y a le CPAN (Comprehensive Perl Archive Network) où on peut trouver pas mal de modules qui ferront le travail à notre place (j'ai oublié de dire que les perliens ce sont des paresseux - tu veux toujours apprendre Perl ;-))
Pour accèder aux bases de données il y a plusieurs modules
DBI
Class::DBI::MSAccess
DBD::ODBC
pour convertire une base Access vers une autre base DBIx::MSAccess::Convert2Db
pour les drivers
DBI::DBD
Voilà pour la question ;-))
Bonjour,
Apprendre PERL : https://perl.developpez.com/cours/
Si tu as des questions, tu as les réponses dans la F.A.Q PERL : https://perl.developpez.com/faq/
Apprendre PERL : https://perl.developpez.com/cours/
Si tu as des questions, tu as les réponses dans la F.A.Q PERL : https://perl.developpez.com/faq/
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
12 nov. 2007 à 12:49
12 nov. 2007 à 12:49
Salut,
Si tu as des questions, tu as les réponses dans la F.A.Q PERL
Pas toutes ;-)
Les questions peuvent variées.
Pour ce qui concerne la documentation Perl, le meilleur choix c'est le livre écrit par Larry WALL lui même Programmation Perl, je t'assure que ça vaut le coup si Perl t'interesse.
Si l'anglais ne te pose pas des problèpmes regarde les livres en ligne sur Perl
En 2ème position je mettrais Documentation Perl en français
Si tu as des questions, tu as les réponses dans la F.A.Q PERL
Pas toutes ;-)
Les questions peuvent variées.
Pour ce qui concerne la documentation Perl, le meilleur choix c'est le livre écrit par Larry WALL lui même Programmation Perl, je t'assure que ça vaut le coup si Perl t'interesse.
Si l'anglais ne te pose pas des problèpmes regarde les livres en ligne sur Perl
En 2ème position je mettrais Documentation Perl en français
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
12 nov. 2007 à 21:43
12 nov. 2007 à 21:43
Merci pour vos réponses,
Donc, c'est quand même bien que Perl puisse interagir avec des bases de données. J'étais à peu près certain que c'était le cas. Je vais essayer d'obtenir le livre de Wall et je vais aller faire un tour sur le CPAN pour avoir une vue générale des possibilités de Perl. Je vais également aller voir la FAQ dont parle Tobydélice.
Encore merci et salutations à tous,
Donc, c'est quand même bien que Perl puisse interagir avec des bases de données. J'étais à peu près certain que c'était le cas. Je vais essayer d'obtenir le livre de Wall et je vais aller faire un tour sur le CPAN pour avoir une vue générale des possibilités de Perl. Je vais également aller voir la FAQ dont parle Tobydélice.
Encore merci et salutations à tous,
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
12 nov. 2007 à 22:06
12 nov. 2007 à 22:06
Salut,
Pour utilisez la FAQ (frequently ask question ou foire aux questions), vaut mieux savoir quoi demander ;-)
Mieux vaux lire des tutoriaux.
Pour l'info
Semble-t-il que Tobydélice est un fan de devellopez.com puisque ce sont les seuls réponses qu'il donne
Voici quelques exemples.
http://www.commentcamarche.net/forum/affich 4021547 applications sur les fichiers#dernier
http://www.commentcamarche.net/forum/affich 4021782 access#dernier
http://www.commentcamarche.net/forum/affich 4022898 crystal report 9 et vb 2005#dernier
http://www.commentcamarche.net/forum/affich 4023397 stat sql serveur#dernier
Pour utilisez la FAQ (frequently ask question ou foire aux questions), vaut mieux savoir quoi demander ;-)
Mieux vaux lire des tutoriaux.
Pour l'info
Semble-t-il que Tobydélice est un fan de devellopez.com puisque ce sont les seuls réponses qu'il donne
Voici quelques exemples.
http://www.commentcamarche.net/forum/affich 4021547 applications sur les fichiers#dernier
http://www.commentcamarche.net/forum/affich 4021782 access#dernier
http://www.commentcamarche.net/forum/affich 4022898 crystal report 9 et vb 2005#dernier
http://www.commentcamarche.net/forum/affich 4023397 stat sql serveur#dernier
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
17 nov. 2007 à 22:40
17 nov. 2007 à 22:40
Bonjour,
Pour répondre à lami20j, mon but n'est pas d'en apprendre autant qu'un administrateur de réseaux Linux/Unix mais simplement d'en apprendre suffisamment pour les applications que je désire faire (traitement de fichiers sous forme de tri et interactions avec des bases de données et des chiffriers électroniques.) Je veux surtout mettre l'accent sur le langage C que je dois réapprendre (plus tard ce sera C++). Avec le C et la base de Perl, je serai en F-1. Les liens que tu m'as donnes concernant les modules DBI, DBD et ODBC vont m'etre tres utiles.
Je voudrais soumettre un script qui tente de trier des lignes représentant des fichiers musicaux présents dans un répertoire (Mon script est basé sur un script que lami20j a écrit). Voici mes lignes a trier :
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Les deux critères que j'ai choisis pour trier mes lignes sont :
1) le taux d'échantillonnage;
2) l'année.
Donc, je devrais obtenir le résultat suivant :
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
J'obtiens plutôt
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
C'est-a-dire que rien ne bouge!
Voici mon script Perl :
#!/usr/bin/perl
while(<DATA>){
/^-(.*):\d{2}(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
chomp;
push @nontrie,[$_,$2,$3,$4,$5,$6,$7];
}
@trie = map {$_->[0] }
sort {
$a->[7] <=> $b->[7]
||
$a->[5] <=> $b->[5]
} @nontrie;
print "$_\n" for @trie;
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Explication de mon script :
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
- : Toutes les lignes commencent avec le trait d'union
(.*) : Prend tous les caracteres avant les deux-points : ($1)
: : deux-points
\d{2} : Apres les deux-points, il y a necessairement deux entiers
\s : Espacement
(\w) : Prend le caractere designe pour la langue, ici apres l'espacement : ($2)
_ : Correspond au premier sousligne
(\w{3}) : Correspond a la nationalite : ($3)
_ : Correspond au deuxieme sousligne
(\w*) : Correspond a l'artiste : ($4)
\[ : Correspond a [
(\d{4}) : Correspond a l'annee : ($5)
\] : Correspond a ]
-(\w*)- : Correspond au titre de la chanson : ($6)
\[ : Correspond a [
(\d{3}) : Correspond au taux : ($7)
\]\.mp3$/; : Correspond a ].mp3
Je trie ensuite par rapport a $7 et $5.
Voici le script de lami20j qui trie des images par les valeurs des resolutions et par l'annee (et qui fonctionne bien).
#!/usr/bin/perl
while(<DATA>){
/.*:\d+\s+(.*)\[(\d+)x(\d+)\](\d{4})\..*/;
chomp;
push @nontrie,[$_,$2,$3,$4];
}
@trie = map {$_->[0] }
sort {
$a->[1] <=> $b->[1]
||
$a->[2] <=> $b->[2]
||
$a->[3] <=> $b->[3]
} @nontrie;
print "$_\n" for @trie;
__END__
-rwxrwx--- 1 53460 2007-10-07 02:29 600px-V838_Mon_HST[600x600]1999.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 abc[600x600]1999.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 abc[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 Abc[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 acb[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 A00px-V838_Mon_HST[600x600]1999.jpg
-rwxrwx--- 1 69991 2007-10-07 02:27 739px-Omega_Nebula[739x600]1996.jpg
-rwxrwx--- 1 37021 2007-10-07 02:26 NGC2080[600x601]1998.jpg
-rwxrwx--- 1 138525 2007-10-07 02:25 603px-Crab_Nebula[603x600]1997.jpg
-rwxrwx--- 1 525752 2007-10-07 02:24 ESO97-13[1280x1280]1999.jpg
-rwxrwx--- 1 88098 2007-10-07 02:24 600px-ESO97-13[600x600]1997.jpg
Je ne comprends pas que le mien ne fonctionne pas. Ou est l'erreur? J'ai hate de savoir ce qui fait defaut!
Merci, :-)
Pour répondre à lami20j, mon but n'est pas d'en apprendre autant qu'un administrateur de réseaux Linux/Unix mais simplement d'en apprendre suffisamment pour les applications que je désire faire (traitement de fichiers sous forme de tri et interactions avec des bases de données et des chiffriers électroniques.) Je veux surtout mettre l'accent sur le langage C que je dois réapprendre (plus tard ce sera C++). Avec le C et la base de Perl, je serai en F-1. Les liens que tu m'as donnes concernant les modules DBI, DBD et ODBC vont m'etre tres utiles.
Je voudrais soumettre un script qui tente de trier des lignes représentant des fichiers musicaux présents dans un répertoire (Mon script est basé sur un script que lami20j a écrit). Voici mes lignes a trier :
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Les deux critères que j'ai choisis pour trier mes lignes sont :
1) le taux d'échantillonnage;
2) l'année.
Donc, je devrais obtenir le résultat suivant :
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
J'obtiens plutôt
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1969]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
C'est-a-dire que rien ne bouge!
Voici mon script Perl :
#!/usr/bin/perl
while(<DATA>){
/^-(.*):\d{2}(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
chomp;
push @nontrie,[$_,$2,$3,$4,$5,$6,$7];
}
@trie = map {$_->[0] }
sort {
$a->[7] <=> $b->[7]
||
$a->[5] <=> $b->[5]
} @nontrie;
print "$_\n" for @trie;
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Explication de mon script :
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
- : Toutes les lignes commencent avec le trait d'union
(.*) : Prend tous les caracteres avant les deux-points : ($1)
: : deux-points
\d{2} : Apres les deux-points, il y a necessairement deux entiers
\s : Espacement
(\w) : Prend le caractere designe pour la langue, ici apres l'espacement : ($2)
_ : Correspond au premier sousligne
(\w{3}) : Correspond a la nationalite : ($3)
_ : Correspond au deuxieme sousligne
(\w*) : Correspond a l'artiste : ($4)
\[ : Correspond a [
(\d{4}) : Correspond a l'annee : ($5)
\] : Correspond a ]
-(\w*)- : Correspond au titre de la chanson : ($6)
\[ : Correspond a [
(\d{3}) : Correspond au taux : ($7)
\]\.mp3$/; : Correspond a ].mp3
Je trie ensuite par rapport a $7 et $5.
Voici le script de lami20j qui trie des images par les valeurs des resolutions et par l'annee (et qui fonctionne bien).
#!/usr/bin/perl
while(<DATA>){
/.*:\d+\s+(.*)\[(\d+)x(\d+)\](\d{4})\..*/;
chomp;
push @nontrie,[$_,$2,$3,$4];
}
@trie = map {$_->[0] }
sort {
$a->[1] <=> $b->[1]
||
$a->[2] <=> $b->[2]
||
$a->[3] <=> $b->[3]
} @nontrie;
print "$_\n" for @trie;
__END__
-rwxrwx--- 1 53460 2007-10-07 02:29 600px-V838_Mon_HST[600x600]1999.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 abc[600x600]1999.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 abc[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 Abc[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 acb[600x600]1997.jpg
-rwxrwx--- 1 53460 2007-10-07 02:29 A00px-V838_Mon_HST[600x600]1999.jpg
-rwxrwx--- 1 69991 2007-10-07 02:27 739px-Omega_Nebula[739x600]1996.jpg
-rwxrwx--- 1 37021 2007-10-07 02:26 NGC2080[600x601]1998.jpg
-rwxrwx--- 1 138525 2007-10-07 02:25 603px-Crab_Nebula[603x600]1997.jpg
-rwxrwx--- 1 525752 2007-10-07 02:24 ESO97-13[1280x1280]1999.jpg
-rwxrwx--- 1 88098 2007-10-07 02:24 600px-ESO97-13[600x600]1997.jpg
Je ne comprends pas que le mien ne fonctionne pas. Ou est l'erreur? J'ai hate de savoir ce qui fait defaut!
Merci, :-)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
17 nov. 2007 à 22:52
17 nov. 2007 à 22:52
Salut,
je n'ai pas le temps de regarder ce soir.
en revanche tu peux faire un print sur tes variables pour voir ce que tu obtiens, ainsi tu pourras peut être trouver l'erreur
Pour répondre à lami20j, mon but n'est pas d'en apprendre autant qu'un administrateur de réseaux Linux/Unix
Je n'ai rien dit moi ;-)
je n'ai pas le temps de regarder ce soir.
en revanche tu peux faire un print sur tes variables pour voir ce que tu obtiens, ainsi tu pourras peut être trouver l'erreur
#!/usr/bin/perl while(<DATA>){ /^-(.*):\d{2}(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/; print "\$2=$2,\$3=$3,\$4=$4,\$5=$5,\$6=$6,\$7=$7"; }
Pour répondre à lami20j, mon but n'est pas d'en apprendre autant qu'un administrateur de réseaux Linux/Unix
Je n'ai rien dit moi ;-)
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
17 nov. 2007 à 23:12
17 nov. 2007 à 23:12
Je vais essayer ca immediatement.
Merci :-)
Merci :-)
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
17 nov. 2007 à 23:33
17 nov. 2007 à 23:33
Eh bien lami20j, je viens d'essayer ton petit truc et j'ai ete quand meme satisfait du resultat. Toutes les variables sont bel et bien assignees aux parametres que je voulais.
Je suis donc content de ne pas avoir fait d'erreurs de ce cote. J'ai modifie ta ligne en ajoutant des sauts de ligne /n pour que ce soit plus lisible.
Le seul probleme c'est que ca ne trie pas!!! Ca devient donc encore plus mysterieux car je croyais avoir fait une erreur dans l'assignation des variables, ce qui n'est pas le cas. Et le tri, je le fais selon la procedure que tu as utilisee.
Prends ton temps, je vais attendre.
Salutations, :-)
Je suis donc content de ne pas avoir fait d'erreurs de ce cote. J'ai modifie ta ligne en ajoutant des sauts de ligne /n pour que ce soit plus lisible.
Le seul probleme c'est que ca ne trie pas!!! Ca devient donc encore plus mysterieux car je croyais avoir fait une erreur dans l'assignation des variables, ce qui n'est pas le cas. Et le tri, je le fais selon la procedure que tu as utilisee.
Prends ton temps, je vais attendre.
Salutations, :-)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
18 nov. 2007 à 09:10
18 nov. 2007 à 09:10
Salut,
2 erreurs dans ton script
1. dans ton fichier entre l'heure et le 1er caractère qui est e il y a au moins un espace et on ne le vois pas dans ta regex
(
j'ai ete quand meme satisfait du resultat. Toutes les variables sont bel et bien assignees aux parametres que je voulais.
ça m'ettonne que tu vois tes variables, puisque moi j'ai ça
2. tu as oublié que les indices du tableau commencent à 0 et pas à 1
allez on va compter
donc le champ 7 est le 6ème élément et le 5 champ est le 4ème
ce qui donne
Voici ton script entier
Et voici ma version avec le résultat pour ton script (il faut eviter d'écrire une regex longue et très explicite quand nous n'avons pas besoin ;-)) Apprends à être paresseux (c'est une qualité pour les perliens et pas un défaut ;-DD
Nous ne sommes pas obligé de capturer tous les sous-motifs, ça consomme de texte et si on a beaucoup des lignes à traiter alors le programme peut perdre en performances.
Pense à utiliser (?: ) pour ne pas capturer ce que tu n'as pas besoin ou tout simplement de ne pas utiliser des paranthèses (et c'est ton cas)
En fait les paranthèses on les utilise par exemple quand on veut capturer ou quand il y a des alternatives à faire (motif1|motif2), mais jamais juste pour entourer des motifs.
Si le terme d'alternative je ne veux pas le capturer, c'est ici qu'intervies (?:motif1|motif2). Donc je peux regrouper sans capture.
Dans ton cas on peux les enlever pouisqu'il n'y a pas d'alternative et pas non plus de capture.
Ce qui donne en ton cas
2 erreurs dans ton script
1. dans ton fichier entre l'heure et le 1er caractère qui est e il y a au moins un espace et on ne le vois pas dans ta regex
(
j'ai ete quand meme satisfait du resultat. Toutes les variables sont bel et bien assignees aux parametres que je voulais.
ça m'ettonne que tu vois tes variables, puisque moi j'ai ça
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl # while(<DATA>){ /^-(.*):\d{2}(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/; print "\$2=$2,\$3=$3,\$4=$4,\$5=$5,\$6=$6,\$7=$7\n"; } __END__ -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3 -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 lami20j@debian:~/trash$ perl ccm.pl $2=,$3=,$4=,$5=,$6=,$7= $2=,$3=,$4=,$5=,$6=,$7= $2=,$3=,$4=,$5=,$6=,$7= $2=,$3=,$4=,$5=,$6=,$7= $2=,$3=,$4=,$5=,$6=,$7=revenons à ton script
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3ce qui fait que ta regerx devra être (voir en gras)
/^-(.*):\d{2}\s*(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;au lieu de ce que tu as mis
/^-(.*):\d{2}(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
2. tu as oublié que les indices du tableau commencent à 0 et pas à 1
allez on va compter
@nontrie,[$_,$2,$3,$4,$5,$6,$7]; 0 - $_ 1 - $2 2 - $3 3 - $4 4 - $5 5 - $6 6 - $7
donc le champ 7 est le 6ème élément et le 5 champ est le 4ème
ce qui donne
@trie = map {$_->[0] } sort { $a->[6] <=> $b->[6] || $a->[4] <=> $b->[4]} @nontrie;
Voici ton script entier
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl while(<DATA>){ chomp; /^-(.*):\d{2}\s*(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/; push @nontrie,[$_,$2,$3,$4,$5,$6,$7]; } @trie = map {$_->[0] } sort { $a->[6] <=> $b->[6] || $a->[4] <=> $b->[4]} @nontrie; print "$_\n" for @trie; __END__ -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3 -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3et le résultat
lami20j@debian:~/trash$ perl ccm.pl -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
Et voici ma version avec le résultat pour ton script (il faut eviter d'écrire une regex longue et très explicite quand nous n'avons pas besoin ;-)) Apprends à être paresseux (c'est une qualité pour les perliens et pas un défaut ;-DD
lami20j@debian:~/trash$ cat artagon.pl #!/usr/bin/perl while(<DATA>){ chomp; /.*(\d{4}).*(\d{3}).*\.mp3/; push @nontrie,[$_,$1,$2]; } @trie = map {$_->[0] } sort { $a->[2] <=> $b->[2] || $a->[1] <=> $b->[1]} @nontrie; print "$_\n" for @trie; __END__ -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3 -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 lami20j@debian:~/trash$ perl artagon.pl -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
Nous ne sommes pas obligé de capturer tous les sous-motifs, ça consomme de texte et si on a beaucoup des lignes à traiter alors le programme peut perdre en performances.
Pense à utiliser (?: ) pour ne pas capturer ce que tu n'as pas besoin ou tout simplement de ne pas utiliser des paranthèses (et c'est ton cas)
En fait les paranthèses on les utilise par exemple quand on veut capturer ou quand il y a des alternatives à faire (motif1|motif2), mais jamais juste pour entourer des motifs.
Si le terme d'alternative je ne veux pas le capturer, c'est ici qu'intervies (?:motif1|motif2). Donc je peux regrouper sans capture.
Dans ton cas on peux les enlever pouisqu'il n'y a pas d'alternative et pas non plus de capture.
Ce qui donne en ton cas
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl while(<DATA>){ chomp; /^-.*:\d{2}\s*\w_\w{3}_\w*\[(\d{4})\]-\w*-\[(\d{3})\]\.mp3$/; push @nontrie,[$_,$1,$2]; } @trie = map {$_->[0] } sort { $a->[2] <=> $b->[2] || $a->[1] <=> $b->[1]} @nontrie; print "$_\n" for @trie; __END__ -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3 -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 lami20j@debian:~/trash$ perl ccm.pl -r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3 -r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3 -r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3 -r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3 -r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
18 nov. 2007 à 22:38
18 nov. 2007 à 22:38
Salut lami20j,
Concernant la première erreur (l'espacement), j'ai fait une erreur dans le message #7. Je n'ai pas ajouté le terme \s dans mon script mais je l'ai ajouté dans l'explication que j'ai donnée!
Quand, j'ai fait ton test d'affichage des variables hier, j'ai pris mon script dans lequel j'avais deja ajoute le terme \s et non ton script d'essai (voir plus bas). C'est la raison pour laquelle j'ai pu voir mes variables.
“Ton” script test n'affiche pas les variables parce que tu as copié/collé directement mon script dans lequel il manque \s.
Remarque : Toi tu mets \s* mais on peut mettre que \s car il n'y a qu'un seul espacement.
Donc, si tu rajoutes \s (en gras) dans le script test suivant, ca affiche les variables.
#!/usr/bin/perl
while(<DATA>){
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
print "\$2=$2,\$3=$3,\$4=$4,\$5=$5,\$6=$6,\$7=$7\n"; }
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Concernant la capture des motifs dont tu parles, c'est une bonne remarque. Je savais que je ne suis pas obligé de tous les prendre. C'est simplement parce que, dans mon cas, ce script est juste une ébauche d'un script plus général qui va me permettre de choisir les critères de tri au moyen d'un menu que je vais faire afficher à l'écran.
Par exemple : Choix 1) Artiste et taux d'échantillonnage
2) Artiste et année
3) 4) etc ...
Je dois donc, dans cette optique, capturer toutes mes variables et les garder.
Donc le script que je garderai est le suivant (general) :
#!/usr/bin/perl
while(<DATA>){
chomp;
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
push @nontrie,[$_,$2,$3,$4,$5,$6,$7];
} @trie = map {$_->[0] }
sort { $a->[6] <=> $b->[6] || $a->[4] <=> $b->[4]} @nontrie;
print "$_\n" for @trie;
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Donc RESOLU!
Merci beaucoup lami20j, :-))
Concernant la première erreur (l'espacement), j'ai fait une erreur dans le message #7. Je n'ai pas ajouté le terme \s dans mon script mais je l'ai ajouté dans l'explication que j'ai donnée!
Quand, j'ai fait ton test d'affichage des variables hier, j'ai pris mon script dans lequel j'avais deja ajoute le terme \s et non ton script d'essai (voir plus bas). C'est la raison pour laquelle j'ai pu voir mes variables.
“Ton” script test n'affiche pas les variables parce que tu as copié/collé directement mon script dans lequel il manque \s.
Remarque : Toi tu mets \s* mais on peut mettre que \s car il n'y a qu'un seul espacement.
Donc, si tu rajoutes \s (en gras) dans le script test suivant, ca affiche les variables.
#!/usr/bin/perl
while(<DATA>){
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
print "\$2=$2,\$3=$3,\$4=$4,\$5=$5,\$6=$6,\$7=$7\n"; }
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Concernant la capture des motifs dont tu parles, c'est une bonne remarque. Je savais que je ne suis pas obligé de tous les prendre. C'est simplement parce que, dans mon cas, ce script est juste une ébauche d'un script plus général qui va me permettre de choisir les critères de tri au moyen d'un menu que je vais faire afficher à l'écran.
Par exemple : Choix 1) Artiste et taux d'échantillonnage
2) Artiste et année
3) 4) etc ...
Je dois donc, dans cette optique, capturer toutes mes variables et les garder.
Donc le script que je garderai est le suivant (general) :
#!/usr/bin/perl
while(<DATA>){
chomp;
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
push @nontrie,[$_,$2,$3,$4,$5,$6,$7];
} @trie = map {$_->[0] }
sort { $a->[6] <=> $b->[6] || $a->[4] <=> $b->[4]} @nontrie;
print "$_\n" for @trie;
__END__
-r-xr-xr-x 1 1977910 2002-04-01 15:43 e_can_heart[1976]-dreamboat_annie-[128].mp3
-r-xr-xr-x 1 5538881 2006-04-14 22:02 e_gbr_eno_brian[1975]-mother_whale_eyeless-[128].mp3
-r-xr-xr-x 1 5794058 2006-03-25 06:01 e_gbr_king_crimson[1970]-cadence_and_cascade-[166].mp3
-r-xr-xr-x 1 2428835 2007-08-04 03:05 e_gbr_peter_and_gordon[1965]-everyones_gone_to_the_moon-[128].mp3
-r-xr-xr-x 1 4304271 2006-04-02 00:36 e_gbr_sweet[1974]-restless-[132].mp3
Donc RESOLU!
Merci beaucoup lami20j, :-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
18 nov. 2007 à 22:44
18 nov. 2007 à 22:44
Salut,
“Ton” script test n'affiche pas les variables parce que tu as copié/collé directement mon script dans lequel il manque \s.
Je ne pouvais pas le savoir ;-))
Remarque : Toi tu mets \s* mais on peut mettre que \s car il n'y a qu'un seul espacement.
Donc, si tu rajoutes \s (en gras) dans le script test suivant, ca affiche les variables.
On n'est jamais sur, à mettre un quantificateur par précaution, n'est pas si mauvais ;-))
Bonne continuation ;-)
“Ton” script test n'affiche pas les variables parce que tu as copié/collé directement mon script dans lequel il manque \s.
Je ne pouvais pas le savoir ;-))
Remarque : Toi tu mets \s* mais on peut mettre que \s car il n'y a qu'un seul espacement.
Donc, si tu rajoutes \s (en gras) dans le script test suivant, ca affiche les variables.
On n'est jamais sur, à mettre un quantificateur par précaution, n'est pas si mauvais ;-))
Bonne continuation ;-)