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
Salut lami20j,

Je n'aborderai pas ce soir le script que j'ai écrit et qui ne fonctionne pas. Ca va aller à plus tard car malheureusement j'ai d'autres travaux à effectuer.

J'aimerais cependant pour débuter cette discussion poser une question très générale.

Q-1 Je suis très curieux de savoir si on peut lier Perl à Access (ou à toutes autres bases de données)? C'est-à-dire, par exemple, est-ce que je peux envoyer le contenu d'une variable Perl (par exemple $3) dans une table présente dans une base de données? (J'espère que c'est le cas car ça pourrait m'être très utile ... et peut-être à d'autres également!)

Merci

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
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.
0
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
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 ;-))
0
Tobydélice
12 nov. 2007 à 12:20
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/
0
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
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
0

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
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,
0
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
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
0
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
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, :-)
0
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
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

#!/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 ;-)
0
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
Je vais essayer ca immediatement.

Merci :-)
0
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
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, :-)
0
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
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
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].mp3 
ce 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].mp3
et 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

0
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
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, :-))
0
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
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 ;-)
0