Classement Longueur des mots - Logiciels - Windows & Software
Marsh Posté le 27-08-2010 à 12:23:48
Par exemple avec le petit script VBS ci-dessous (testé).
' Tri d'un fichier sur la longueur de chacune de ses lignes |
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.
Marsh Posté le 27-08-2010 à 13:51:59
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é.
Marsh Posté le 27-08-2010 à 14:14:24
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.
Marsh Posté le 27-08-2010 à 14:26:48
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.
Marsh Posté le 27-08-2010 à 15:36:44
C'est pas que ça va ou pas c'est que je n'arrive pas à faire la démarche de oliv
Marsh Posté le 27-08-2010 à 15:48:19
Quand je lance le fichier, il me met erreur, fichier introuvable
Marsh Posté le 27-08-2010 à 16:11:22
Voilà j'ai réussi mais ça bug assez bien sur ma liste de 100 000 lignes
Marsh Posté le 27-08-2010 à 16:15:36
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 ?
Marsh Posté le 27-08-2010 à 16:22:41
Ok vais voir si j'ai un moment pour faire un truc ce week-end...
Marsh Posté le 28-08-2010 à 17:59:44
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
Marsh Posté le 29-08-2010 à 11:42:23
Je n'arrive pas à suivre ta démarche . Saurait tu m'expliquer en détaillant plus les manipulations à faire Merci beaucoup
Marsh Posté le 29-08-2010 à 19:47:24
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" |
Si tu as :
'java' n'est pas reconnu en tant que commande interne |
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é.
Marsh Posté le 30-08-2010 à 00:47:03
Waw merci beaucoup, c'est nickel et d'une vitesse impressionnante . Un grand merci
Marsh Posté le 27-08-2010 à 10:53:25
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