Tri alphabétique d'un fichier après fusion - Java - Programmation
Marsh Posté le 29-03-2010 à 11:49:15
Salut Eva,
Citation : J'aimerais fusionner ces fichiers dans un même fichier, et ensuite trier les lignes du fichier obtenu par leur date. |
Moi je ferai plutot dans le sens inverse. Tu tri d'abord tes fichiers indépendament et ensuite tu les fusionnes.. Si tu as besoin d'autres explications n'hésite pas.
Tu peux mettre ton programme dans un post, on regardera et on t'aidera a faire ça.
A+
Marsh Posté le 29-03-2010 à 22:15:37
C'est un exo et faut justifier pourquoi ton truc est optimisé, ou c'est juste pour toi?
Ils sont gros tes fichiers?
Garanti pas optimisé, mais j'me ferais pas chier:
- tu les lis tous d'un coup, en mettant tes lignes dans un gros ArrayList comme tu dis
- après tu fais un Arrays.sort(tonArrayList)
- et pouf tu reparcours ta liste en écrivant le fichier de sortie
Après si tes fichiers/lignes sont gros, ou ton pc un peu vieux, et que t'as des problèmes de perf, faudra peaufiner. Mais bon ya 99% de chances que le truc qui va limiter la vitesse ce soit les I/O avec le disque dur et rien d'autre, et ca, t'y peux rien.
Marsh Posté le 29-03-2010 à 22:36:29
Le solution de l'arraylist c'est un fake
Ca dépend en fait de la taille de ton fichier mais admettons que tu ai un gros fichier genre 2 Go. Si tu mets tous dans un arrayList, deux problèmes:
1) tu peux atteindre le nombre d'élément maximum d'un arraylist et dans ce cas ton programme ne tourne même plus
2) tu peux saturer ta ram qui est par défaut de 512 mo je crois pour la JVM qui fait que ton programme ne pourra pas non plus traiter le fichier
En plus l'arraylist c'est bien mais bof quand même, si tu veux des éléments triés c'est mieux de les rajouter dans une structures de données triée du genre TreeSet qui tri les éléments au fur et à mesure que les rajoutes. Comme ça à la fin du "insert" tu te retrouve avec un liste d'objet déjà trie tu n'as plus que les sortir et tu n'as pas à appeler la méthode sort() sur 2 millions d'enregistrements
Après faut voir la taille du fichier, si c'est un fichier de mickey genre 3 mo toutes les solutions conviennes
Le mieux doit être de faire les tris puis fusionner les versions triées...
Marsh Posté le 29-03-2010 à 22:45:30
Oui oui j'avais dit que c'est pas optimisé du tout hein. D'un autre coté vu les infos qu'on a...
Marsh Posté le 29-03-2010 à 11:39:29
Bonjour,
J'ai plusieurs fichiers, dont chacune des lignes commence par une date du type:
2010-03-26 13:45:45,206 ......
J'aimerais fusionner ces fichiers dans un même fichier, et ensuite trier les lignes du fichier obtenu par leur date.
Quelle est la méthode la plus performante pour obtenir un résultat en peu de temps ?
ex:
-> Lire les fichiers en parallèle et créer le nouveau fichier petit à petit après comparaison des dates
-> Tout copier dans un fichier, et faire un tri en utilisant des ArrayList (chaque entrée de la liste serait une ligne du fichier)
Merci d'avance pour vos conseils ou idées,
Eva