IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

trie de nom de fichier caracteres+numerique


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Points : 48
    Points
    48
    Par défaut trie de nom de fichier caracteres+numerique
    Salut
    j´aiu un tableau ayant des noms de fichiers du genre fichier_00_e1.txt, fichier_00_e2.txt,fichier_00_e3.txt,............,fichier_00_e10.txt.

    Quand je fais un tri sur le tableau du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @tab_trie=sort(@tab_non_trie);
    il commence par m´afficher fichier_00_e1.txt, ensuite fichier_00_e10.txt (et non fichier_00_e2.txt)...

    Comment est ce que je peux faire a ce que le tableau soit trié du fichier 1 au 10, ensuite 11, 12 quand le nombre augmentera??
    PS: quand le tableau n´est pas trié il commence par le fichier_00_e10.txt (je lis un repertoire et je mets au für et a mesure les fichiers commencant par fichier_*.txt dans le tableau @tab_non_trie )
    Merci

  2. #2
    Membre habitué Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Points : 145
    Points
    145
    Par défaut
    Salut

    Tu peut créer une fonction de trie selon un schéma spécifique et la passer en parametre à la fonction sort...

    Voila à quoi la fonction peut ressembler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    sub sort_by_num()
    {
    	# $a et $b represente les deux noms de fichiers
    	# on recupere le dernier chiffre
    	$a =~ m /fichier_00_e(\d+)\.txt/;
    	my $c1 = $1;
    	$b =~ m /fichier_00_e(\d+)\.txt/;
    	my $c2 = $1;
    	# on trie selon les chiffres $c1 et $c2
    	if($c1 < $c2)
     		{ return -1; }
     	elsif($c1 == $c2)
      		{ return 0; }
     	else
      		{ return 1; }
    }
    et tu l'apelle comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @tableau = sort(sort_by_num @tableau);
    Voila...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Points : 48
    Points
    48
    Par défaut
    salut crochepatte,
    je viens de tester ton algo mais il commence par le fichier fichier_00_e10.txt , ensuite fichier_00_e1.txt , 2,3, etc....


  4. #4
    Membre habitué Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Points : 145
    Points
    145
    Par défaut
    Peut tu me montrer ton code?
    J'ai fais un test sur mon poste et cela marche pourtant...
    Etrange????

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Points : 48
    Points
    48
    Par défaut
    Voici mon code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    sub NumberSort{
     
    $a=~ m/ref_.*(\d+)\.scr/;
    my $c1=$1;
     
    $b=~ m/ref_.*(\d+)\.scr/;
    my $c2=$1;
     
    if($c1<$c2){return -1;}
    elsif($c1==$c2){return 0;}
    else {return 1;}
     
    }
     
     
    #############################
     
    sub function {
     
     
     opendir(DIRT, ".")|| die "Can´t open directory '.'\n";
     @file_re=grep { m/^ref_.*\.scr$/ } readdir(DIRT);   #lit les fichier du rep qui commencent par ref par exemple ref_03092006_e1.scr, ref_03092006_e10.scr, j´ai preferé faire la recherche sur ref_.* car les noms changent mais st tjrs identiques ds le changement dc 03092006 c la date ca pourrait etre 05102006
     closedir(DIRT);
     
      foreach my $el(@file_re){  #pour voir ce qu´il affiche avant le tri
       	print "$el \n";		
         }
     
     
    @file_re_sortiert = sort (NumberSort @file_re);
     
        foreach my $el(@file_re_sortiert){ #pour voir ce qu´íl affiche apres le tri
       	print "$el \n";		
         }

  6. #6
    Membre habitué Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Points : 145
    Points
    145
    Par défaut
    Je pense qu'avec l'expression...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $a=~ m/ref_.*(\d+)\.scr/;
    my $c1=$1;
    ...On ne recupere pas le bon chiffre surtout avec le ".*"...
    Comment sont formé tes nom de fichier?

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Points : 48
    Points
    48
    Par défaut
    Mes noms de fichiers sont de la sorte :

    ref_03092006_e1.scr, ref_03092006_e2.scr,ref_03092006_e3.scr, ref_03092006_e4.scr, ...5,6,7,8,9..................ref_03092006_e10.scr, ref_03092006_e11.scr etc...

    Donc le chiffre a la fin change en fonction de l´ordre de creation du fichier

    A bientot

  8. #8
    Membre habitué Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Points : 145
    Points
    145
    Par défaut
    Essaie plutot cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $a=~ m/ref_\d+_e(\d+)\.scr/;
    Je pense que cela devrai marcher...
    Enfin j'espere...

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Points : 48
    Points
    48
    Par défaut
    Effectivement ca fonctionne. Merci Bcp crochepatte....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/12/2008, 11h30
  2. Réponses: 2
    Dernier message: 08/10/2008, 21h23
  3. Réponses: 4
    Dernier message: 31/12/2007, 11h39
  4. Réponses: 3
    Dernier message: 08/08/2006, 08h44
  5. Réponses: 17
    Dernier message: 12/04/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo