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

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Classement Longueur des mots

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Classement Longueur des mots

n°2958768
x_topspeed
Posté le 27-08-2010 à 10:53:25  profilanswer
 

Bonjour à tous,
 
Je vous expose mon problème. J'aurai besoin d'une astuce pour trier une liste de mots selon leur longueur. Si il faut un programme spécifique, expliquez moi quand même l'astuce :)
 
Merci de votre aide
 
Bonne journée

mood
Publicité
Posté le 27-08-2010 à 10:53:25  profilanswer
 

n°2958779
olivthill
Posté le 27-08-2010 à 12:23:48  profilanswer
 

Par exemple avec le petit script VBS ci-dessous (testé).

' Tri d'un fichier sur la longueur de chacune de ses lignes
'
' Lit du fichier en entree, dans la chaine strITF
Set objFSO = CreateObject("Scripting.FileSystemObject" )  
Set objOTF = objFSO.OpenTextFile("fichier_a_lire.txt", 1)  
strOTF = objOTF.ReadAll  
Set objOTF = Nothing  
'
' Enleve le dernier retour à la ligne s'il existe
If (Right(strOTF, Len(vbCrLf)) = vbCrLf) Then  
   strOTF = Left(strOTF, Len(strOTF) - Len(vbCrLf))  
End If  
'
' Découpe la chaine dans un tableau
arrROW = Split(vbCrLf & strOTF, vbCrLf)  
Set strOTF = Nothing  
'
' Tri bulle du tableau
For i = LBound(arrROW) to UBound(arrROW)
   For j = LBound(arrROW) to UBound(arrROW)
      If (j < UBound(arrROW)) Then
         If (Len(arrROW(j)) > Len(arrROW(j + 1))) Then
            TempValue = arrROW(j + 1)
            arrROW(j + 1) = arrROW(j)
            arrROW(j) = TempValue
         End If
      End If
   Next
Next
'
' Ecrit le tableau dans un nouveau fichier
Set objOTF = objFSO.OpenTextFile("fichier_trie.txt", 2, True)
For Each s In arrROW
  objOTF.write s & vbCrLf
Next
Set objOTF = Nothing  
'
Set objFSO = Nothing  
WScript.Quit  

Il faut mettre ces ligne dans un fichier que l'on appellera, par exemple "tri_lg.vbs".
Pour l'exécuter, il suffit de cliquer dessus, dans l'explorateur Windows.
VBS est en standard depuis Windows 95 environ.

n°2958796
Requin
Posté le 27-08-2010 à 13:51:59  profilanswer
 

J'apporte juste deux remarques de "pinailleur" ;)
 
1) VBS est langage interprété et particulièrement lent à l'exécution
2) Le tri par bulle si ma mémoire est bonne a une complexité algorithmique en n au carré dans le pire des cas... ce qui n'est vraiment pas terrible, un tri fusion est bien plus efficace (n log n) surtout si le nombre d'éléments est élevé.

n°2958803
x_topspeed
Posté le 27-08-2010 à 14:10:26  profilanswer
 

Saurais tu m'aider requin?

n°2958805
Requin
Posté le 27-08-2010 à 14:14:24  profilanswer
 

As-tu des problèmes de performance avec ce qui t'a été proposé par olivthill ?
 
Car si les temps d'exécution sont acceptables il n'y a pas lieu de chercher.

n°2958808
olivthill
Posté le 27-08-2010 à 14:26:48  profilanswer
 

Ok, regardons les performances.
Je rajoute, au début

Start = Now  

Et je rajoute à la fin

Wscript.Echo DateDiff("s", Start, Now)


Je teste avec un fichier de 1000 lignes de 20 caractères en moyenne, sur mon vieil ordinateur de base.
 
J'obtiens le fichier trié en 0 seconde et quelques poussières.
 
N.B. Si on travaille avec des fichiers très gros, on risque d'atteindre les limites de la fonction ReadAll et il faudrait la remplacer par une boucle et des ReadLine.
 
EDIT : Un test avec un fichier de 730 ko contenant 25.000 lignes passe sans problème avec ReadAll, mais cela prend 18 minutes.


Message édité par olivthill le 27-08-2010 à 15:18:26
n°2958817
x_topspeed
Posté le 27-08-2010 à 15:36:44  profilanswer
 

C'est pas que ça va ou pas c'est que je n'arrive pas à faire la démarche de oliv

n°2958818
x_topspeed
Posté le 27-08-2010 à 15:48:19  profilanswer
 

Quand je lance le fichier, il me met erreur, fichier introuvable

n°2958820
x_topspeed
Posté le 27-08-2010 à 16:11:22  profilanswer
 

Voilà j'ai réussi mais ça bug assez bien sur ma liste de 100 000 lignes

n°2958821
Requin
Posté le 27-08-2010 à 16:15:36  profilanswer
 

Ouaip 100000 éléments tu auras déjà un gain significatif en changeant l'algo pour un merge sort (tri fusion)...  
 
As-tu besoin de régulièrement trier ces 100000 éléments ou c'était juste 1x ?

mood
Publicité
Posté le 27-08-2010 à 16:15:36  profilanswer
 

n°2958822
x_topspeed
Posté le 27-08-2010 à 16:17:51  profilanswer
 

J'ai plus où 6 millions à traiter là :)

n°2958825
Requin
Posté le 27-08-2010 à 16:22:41  profilanswer
 

Ok vais voir si j'ai un moment pour faire un truc ce week-end...

n°2958826
x_topspeed
Posté le 27-08-2010 à 16:23:59  profilanswer
 

D'accord Merci Beaucoup :)

n°2958944
Requin
Posté le 28-08-2010 à 17:59:44  profilanswer
 

Salut,
 
le bidule est fait en Java, tu peux le télécharger sous :
http://www.rathgeb.org/temp/SortByLength.jar
 
J'ai mis le code source avec si cela t'intéresse ou que tu as besoin de faire des ajustements tu trouveras les fichiers *.java dans le JAR (un fichier JAR s'ouvre comme un ZIP... change juste l'extension)
 
Il te faut bien entendu une JVM 1.6 pour exécuter le logiciel, si tu n'en as pas une d'installée sur http://java.sun.com le JDK 1.6 Update 21 fera l'affaire.
 
Le programme s'utilise de la manière suivante :

java -jar SortByLength.jar [source] [destination] [encodage]


 
Pour l'encodage généralement les fichiers sont le plus souvent en ISO-8859-1 ou UTF-8, plus rarement en UTF-16. Ce qui donne par exemple :

java -jar SortByLength.jar atrier.txt trie.txt ISO-8859-1


 
Si tu vois des problèmes avec les caractères accentués, il faudra changer l'encodage utilisé pour l'ajuster à tes fichiers. Le caractère de retour à la ligne utilisé est dépendant de ton système (Win, Linux, ...).
 
Au niveau du fonctionnement le logiciel lit ligne par ligne ton fichier d'entrée. Puis une fois en mémoire trie le tout en utilisant Collections.sort() qui implémente un tri par fusion et finalement écrit ligne par ligne le fichier. Ca devrait être bien plus rapide que du VBS sans être non plus forcément l'implémentation la plus rapide possible.
 
Voilà tu pourras dire au passage merci à John von Neumann ;)

n°2959011
x_topspeed
Posté le 29-08-2010 à 11:42:23  profilanswer
 

Je n'arrive pas à suivre ta démarche :). Saurait tu m'expliquer en détaillant plus les manipulations à faire Merci beaucoup

n°2959077
Requin
Posté le 29-08-2010 à 19:47:24  profilanswer
 

1) créer un dossier où tu met le fichier http://www.rathgeb.org/temp/SortByLength.jar et tes fichiers à trier (par exemple C:\SortByLength)
2) Sous XP démarrer -> exécuter -> cmd -> bouton OK (sous Vista & Seven démarrer -> cmd -> entrée)
3) Saisi à l'invite de commande (= la fenêtre noire) 'java -version' (sans guillemets) suivi de entrée, ca doit te donner qqch du genre :

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)

Si tu as :

'java' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

C'est que tu n'as pas l'environnement Java installé, donc télécharge le fichier http://www.oracle.com/technetwork/ [...] 36632.html et installe le et relance ensuite 'java -version' du point 3
4) Ensuite avec l'invite de commande navigue vers le dossier précédemment créé : 'cd c:\SortByLength' (suivi de entrée et sans guillemets)
5) Ensuite saisi à l'invite de commande 'java -jar SortByLength.jar atrier.txt trie.txt ISO-8859-1' où atrier.txt est le fichier que tu veux trier et trie.txt le fichier trié.

n°2959111
x_topspeed
Posté le 30-08-2010 à 00:47:03  profilanswer
 

Waw merci beaucoup, c'est nickel et d'une vitesse impressionnante :). Un grand merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Classement Longueur des mots

 

Sujets relatifs
Classement des fichiers dans un documentFirefox ne retient pas mes mots de passe
affecter des mots-clés, tags à une cellule excelLes mots de passe sont-ils utiles ?
Gestion de vidéos - Classement par type, format d'imagesFiltrer/Remplacer/Bloquer certains mots dans firefox ?
[resolu]Recup saisiesemi auto et login/password IE8 avant formatageLes pseudos et les mots de passent se sont plus gardés en mémoire?
WORD : comment déterminer les mots clés dans un document ? 
Plus de sujets relatifs à : Classement Longueur des mots


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