Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1436 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  tris dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tris dans un fichier

n°1714446
OyT
dyslexics have more fnu
Posté le 08-04-2008 à 15:37:24  profilanswer
 

Salut à tous,
 
j'ai un fichier du type:
 

Code :
  1. X|12|X|X
  2. X|1|X|X
  3. X|2|X|X
  4. X|122|X|X
  5. X|132|X|X
  6. X|172|X|X
  7. X|125|X|X


 
j'ai besoin d'en faire un tri par rapport à la 2e colonne. du coup j'ai trouvé ça:
 

Code :
  1. if(open (FILE,"<fichier.txt" )){
  2.    @files=<FILE>;
  3.    close FILE;
  4. }
  5. @out = sort {
  6.         (split '|', $a, 4)[1] <=>
  7.         (split '|', $b, 4)[1]
  8.     } @files;


 
ça marche nikel. Quelle est ma question vous direz vous...en fait c le 4.... il sert à quoi??? j'ai essayé avec d'autre chiffre ça marche aussi... pourquoi? merci beaucoup

mood
Publicité
Posté le 08-04-2008 à 15:37:24  profilanswer
 

n°1714457
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-04-2008 à 15:46:57  profilanswer
 

c'est la limite et ça sert strictement à rien dans ton cas car tu n'utilises que le 2eme élement ( [1] ) du tableau retourné par le split: voir la doc


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1714487
OyT
dyslexics have more fnu
Posté le 08-04-2008 à 16:20:52  profilanswer
 

Merci beaucoup,
 
effectivement je cherchais au niveau des spécifications du sort...

n°1714567
OyT
dyslexics have more fnu
Posté le 08-04-2008 à 17:53:49  profilanswer
 

Re, ... cette fois j'ai un tri multi critère disons qu'en fait mon fichier soit déjà trier par le premier attribut donc :
 
j'ai un fichier du type:
 

Code :
  1. A|12|X|X
  2. A|1|X|X
  3. B|2|X|X
  4. B|122|X|X
  5. B|132|X|X
  6. C|172|X|X
  7. C|125|X|X


 
j'ai besoin que le résultat soit le suivant :
 
 

Code :
  1. A|1|X|X
  2. A|12|X|X
  3. B|2|X|X
  4. B|122|X|X
  5. B|132|X|X
  6. C|125|X|X
  7. C|172|X|X


 
 
si j'ai bien compris y a une histoire de || mais j'ai l'impression que c'est juste dans le cas d'egalité???? :??:  :??:  
merci d'avance..


Message édité par OyT le 08-04-2008 à 17:57:25
n°1718737
gilou
Modérateur
Modzilla
Posté le 16-04-2008 à 18:22:52  profilanswer
 

Code :
  1. if(open (FILE,"<fichier.txt" )){
  2.    @files=<FILE>;
  3.    close FILE;
  4. }
  5. @out = map $_->[0],
  6.   sort {
  7.     $a->[1] cmp $b->[1] or
  8.     $a->[2] <=> $b->[2]
  9.   }
  10.   map [$_, split /\|/], @files;


Ca va te trier sur ton premier champ (alphanumerique), puis sous-trier sur le second (numérique)
A+,
 
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1718748
gilou
Modérateur
Modzilla
Posté le 16-04-2008 à 18:41:31  profilanswer
 

Une petite explication sur mon post precedent:
Le premier map, transforme une ligne en un array (anonyme) de 5 elements, le premier étant la ligne, et les 4 suivants, les 4 parties de la ligne découpée. Ca sert a separer les champs a trier pour y acceder tout en gardant la ligne.
On a alors un tableau de tableaux a 5 elts, ie les elements du tableaux sont des references sur des tableaux (anonymes) a 5 elts.
On trie ce tableau de tableaux en fonction des champs:
$a->[1] cmp $b->[1] tri alphabétique. Si le premier champ des deux elements (donc ici le 2e element, d'indice 1, des deux tableaux a 5 elements comparés) sont distincts, on ne va pas plus loin, mais si ils sont égaux, $a->[1] cmp $b->[1] vaut 0, et on va donc evaluer le or..., et comparer sur le 2e champ.
On est alors maintenant avec un tableau trié de tableaux a 5 elements.
Le dernier map recupere la premier element de chaque tableau a 5 element, qui est donc la ligne figurant dans le tableau initial.
J'ai adapté a partir d'un exemple de Randall Schwartz himself [:plat00n2]  
A+,


Message édité par gilou le 16-04-2008 à 21:24:34

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1723516
OyT
dyslexics have more fnu
Posté le 24-04-2008 à 12:12:54  profilanswer
 

Merci beaucoup...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  tris dans un fichier

 

Sujets relatifs
[VBA] Copier un fichier en mode "Valeur"[Résolu][VBA] Ouvrir un fichier dans le même processus
lire un fichier texte utilisé par un autre processusinsérer une ligne dans le fichier
PHP : générer un fichier PDF côté serveur et l'imprimer côté clientlien hypertext vers un fichier sur un serveur qui ne fonctionne pas
Opération automatique sur fichier txt coté serveur![PHP] fonction ftp_ pour déplacer un fichier
récupérer les donnees d'un fichier ds 1 tableau pythonTransférer un fichier dans 170 dossiers !
Plus de sujets relatifs à : tris dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR