Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trie de nom de fichier caracteres+numerique

3 réponses
Avatar
lepetitjoe
Salut
j=B4ai 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:


my @tab_trie=3Dsort(@tab_non_trie);

il commence par m=B4afficher 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=E9 du
fichier 1 au 10, ensuite 11, 12 quand le nombre augmentera??
PS: quand le tableau n=B4est pas tri=E9 il commence par le
fichier_00_e10.txt (je lis un repertoire et je mets au f=FCr et a mesure
les fichiers commencant par fichier_*.txt dans le tableau @tab_non_trie
)
Merci

3 réponses

Avatar
Klaus
wrote:
Salut
j´ai 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:


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
)


1. extraire la partie numérique (voir "/^fichier_00_e(d+).txt$/")
2. trier de manière numérique (voir "$a->[1] <=> $b->[1]")
3. resortir l'élément original (voir "$_->[0]")

voir aussi perlfaq4, "Comment trier un tableau par (n'importe quoi)?"
http://perl.enstimac.fr/DocFr/perlfaq4.html#comment%20trier%20un%20tableau% 20par%20(n'importe%20quoi)

voici le programme:
========================= ==========
use strict;
use warnings;

my @tab_non_trie = ('fichier_00_e1.txt',
'fichier_00_e2.txt',
'fichier_00_e3.txt',
'fichier_00_e10.txt');

my @tab_trie = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, /^fichier_00_e(d+).txt$/] }
@tab_non_trie;

{ local $, = "n"; print @tab_trie, ''; }
========================= ==========

Avatar
jl_morel
Dans l'article ,
a dit...

j´ai 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:


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
)


Utilisez le module Sort::Naturally

http://cpan.uwinnipeg.ca/htdocs/Sort-Naturally/Sort/Naturally.html

HTH

--
J-L.M.
http://www.bribes.org/perl

Avatar
Fabrice L.
Utilisez le module Sort::Naturally

http://cpan.uwinnipeg.ca/htdocs/Sort-Naturally/Sort/Naturally.html



Excellentissime ce module, merci monsieur Morel...