IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Concaténation de fichiers csv avec tri


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut Concaténation de fichiers csv avec tri
    Bonjour,

    J'aurais besoin d'un conseil :


    Ce que dois faire mon programme :
    - je dispose d'un certain nombre de fichier csv (colonne séparer par de points virgule).
    - je dois générer un seul gros fichier à partir de tous ces fichiers.
    Mais (parce qu'il y a toujours un mais ...), ce fichier final doit contenir les lignes des différents fichiers trié par rapport à la 2ème colonne de chaque ligne.

    Ce que j'ai fais :
    J'ai créé un objet ligne avec un attribut par colonne.
    J'ai lu tous mes fichiers , mis chaque ligne dans un objet ligne et insérer cet objet dans une List.
    Je dispose d'un objet List contenant toutes les lignes de tous mes fichiers, ensuite je trie sur l'attibut qui va bien, je parcours ma List et écrit chaque ligne dans le fichier final.

    Ca marche parfaitement. Mais c'est un peut long, surtout si j'ai beaucoup de fichiers.

    Ma question est : auriez vous une autre idée pour implémenter ce petit problème, y'a t'il une api spécifique ... etc

    Merci d'avance pour votre aide :-)

    Bonne journée

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    les fichiers sources sont deja triés ?

    si oui tu peux les parcourirs ligens par ligne et charger en memoire juste la ligne courrante de chaques fichiers puis tu trie les lignes courrantes de chacun de ces fichiers.

    Celui qui est le premier dans la liste, est elu et son contenu est rajouté au fichier final. Puis tu charge en memorie la ligne suivante du meme fichier et relance la comparaison sur les lignes courrantes de tes fichiers csv.

    comme ca tu economise un bon paquet de memoire vive. Le temps de tri devrait etre negligeable face a la copie de chaques lignes de chaques fichiers (temp minimum.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    bonjour,

    je vous donne plus d'explications:

    voici ce que contient un exemple de fichiers

    fic 1 :
    blabla;12/12/2007 01:20:23;Action1;nompersonne1
    blabla;12/12/2007 01:22:23;Action2;nompersonne2
    blabla;12/12/2007 01:25:25;Action3;nompersonne3

    fic 2 :
    blabla;12/12/2007 01:21:23;Action4;nompersonne4
    blabla;12/12/2007 01:24:23;Action5;nompersonne5
    blabla;12/12/2007 01:26:25;Action6;nompersonne6

    Donc au final je dois me retrouver avec :

    blabla;12/12/2007 01:20:23;Action1;nompersonne1 -- fic1
    blabla;12/12/2007 01:21:23;Action4;nompersonne4 -- fic2
    blabla;12/12/2007 01:22:23;Action2;nompersonne2 -- fic1
    blabla;12/12/2007 01:24:23;Action5;nompersonne5 -- fic2
    blabla;12/12/2007 01:25:25;Action3;nompersonne3 -- fic1
    blabla;12/12/2007 01:26:25;Action6;nompersonne6 -- fic2


    Bien sur je n'ai pas que 2 fichiers :-)

    Merci d'avance

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    donc les fichiers csv sont bien deja triés selon la 2e colonne.

    Donc mon algos fonctionnera tres bien

    Il se base simplement sur un systeme de copie alternée et de trie a la copie

    En gros tu charge en memoire :
    F1-L1 et F2-L1
    Si F1-L1 < F2-L1 tu copie F1-L1 et charge F1-L2
    si F1-L2 < F2-L1 tu copie F1-L2 et charge F1-L3
    Si F1-L3 > F2-L1 tu copie F2-L1 et charge F2-L2
    Si F1-L3 < F2-L2 tu copie F1-L3 et charge F1-L4
    [ ... ]

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    En plus, tu n'as même plus à construire un objet Ligne par ligne de fichier. Tu peux garder un seul objet Ligne par fichier. Cet objet sera modifié pour chaque nouvelle ligne. Ca t'évite un "new" par ligne de fichier. Tu vas beaucoup gagner en temps d'exécution.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    ah ok merci,

    1 questions :
    - dois je a chaque fois ouvrir le fichier, prendre la ligne voulu et le fermer ou bien y a t'il une autre solution

    en tout cas merci, j'ai mieux compris avec l'exemple :-)

  7. #7
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Je propose une autre solution possible : si tu peux utiliser une base de données embarquée, ça te permettrait de charger tes fichiers et de faire effectuer les tris nécessaires par me moteur SQL .... Bref, beaucoup moins de code "complexe" à écrire ....

    a voir après au niveau de la performance mais ça pourrait pas mal de simplifier la vie je pense ...

    [EDIT] tu as aussi des drivers ou des api qui te permettent de traiter les fichiers csv comme des tables sql ... c'est peut être plus léger à mettre en place dans ton cas. (par exemple https://xlsql.dev.java.net/ )

  8. #8
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Je creerais une classe par fichier comprenant un objet flux ouvert sur methode open et ferme sur methode close, puis une proprietee de type Line qui me permet d'acceder au champs de la ligne courrante.

    L'appli instanciera autant de classe que de fichier et utilisera le champs currentline pour acceder aux valeurs, trier, etc ...

    bien sur, il faudra prevoir une version writer avec la methode addLine adequote.
    Les Reader eux doivent bien sur posséde uen methode next renvoyant NoLineFoundException ou tout autre exception indiquant que le fichier est terminé.

Discussions similaires

  1. Concaténation de fichier csv avec entête
    Par MottetCCSF dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2007, 20h46
  2. Charger un Fichier CSV avec traitement
    Par Iphelias dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 06/08/2007, 13h53
  3. Réponses: 2
    Dernier message: 13/03/2007, 11h19
  4. Update fichier CSV avec ADO et Windev
    Par bastiencb dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 13/12/2006, 16h27
  5. [CSV] Affichage d'un fichier csv avec pagination
    Par arnoweb dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2006, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo