Tri alphabétique d'un fichier après fusion

Tri alphabétique d'un fichier après fusion - Java - Programmation

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

Reply

Marsh Posté le 29-03-2010 à 11:39:29   

Reply

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+


---------------
Je vous attends mes disciples sur Idées pour un monde meilleur
Reply

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.


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 29-03-2010 à 22:36:29    

Le solution de l'arraylist c'est un fake  :o  
 
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  :o  
 
Après faut voir la taille du fichier, si c'est un fichier de mickey genre 3 mo toutes les solutions conviennes  [:littlebill]  
 
Le mieux doit être de faire les tris puis fusionner les versions triées...
 


---------------
"Tant qu'il y aura des hommes il y aura de comptoirs"
Reply

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...


---------------
C'était vraiment très intéressant.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed