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

Documents Java Discussion :

Charger des données depuis un fichier CSV simple en 5 minutes [Tutoriel]


Sujet :

Documents Java

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut Charger des données depuis un fichier CSV simple en 5 minutes
    Bonjour à tous,

    Je vous propose un petit article dans la série "en 5 minutes", intitulé "Charger des données depuis un fichier CSV simple en 5 minutes".

    Vous trouverez l'article à l'adresse
    http://thierry-leriche-dessirier.dev...ier-csv-5-min/

    Retrouvez également les autres tutoriels de cette série à l'adresse
    http://thierry-leriche-dessirier.dev...#page_articles

    Bonne lecture.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    J'ai réaliser un petit moteur csv à base d'annotations pour mes besoins perso (que je trouve plus simple à utiliser qu'open-csv).

    Ce moteur est dispo ici : https://github.com/ybonnel/MoteurCsv (LGPLv3).
    Et l'utilisation peut être vu dans la classe de test :
    https://github.com/ybonnel/MoteurCsv...urCsvTest.java

    Espérant que cela puisse servir à quelqu'un.

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    J'ai réaliser un petit moteur csv à base d'annotations
    Pour l'article, j'avais choisi Open CSV car je l'avais testé sur de nombreux cas, notamment les fichiers volumineux, les champs multi-lignes, les séparateurs complexes, etc.

    Quelles sont les différences entre Open CSV et votre lib ? Si la lib remplie ses promesses de simplicité, tout en offrant le même niveau de service, je la prendrai en compte dans l'article.

    A noter également le tutoriel "Les fichiers CSV avec Java" :
    http://thierry-leriche-dessirier.dev...csv-avec-java/
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Elle est loin d'être au niveau d'open csv en terme de fonctionnalité (mais je prendrai en compte des pull request avec plaisir ).

    Pas de gestion multi-ligne, utilisé que sur des cas simple (en même temps c'est le titre du tuto ).

    Je l'ai créé quand j'ai eu à décodé du GTFS dans le cadre d'une appli android sur les transports de Rennes et Bordeaux.

    L'intérêt est que ça me prend vraiment 5 minutes montre en main pour ajouté la gestion d'un fichier, et 1 minute pour ajouter une colonne dans le CSV.
    Il est par contre indispensable d'avoir un entête au csv, la gestion des colonnes étant géré par nom et non par position.

    En y réfléchissant, je pense que cela pourrait se positionner comme sur-couche à open csv.

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    la gestion des colonnes étant géré par nom et non par position
    Est ce que ça ressemble à ce que j'ai proposé (et codé moche) dans le tutoriel "Les fichiers CSV avec Java" ?
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Vi un peu, peut être plus simple dans le mapping (avec des annotations).

    Exemple de classe métier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @FichierCsv(value = "objet_csv.txt", separateur = "\\|")
    public static class ObjetCsv {
        @BaliseCsv(value = "att_1", ordre = 0)
        private String attribut1;
     
        @BaliseCsv(value = "att_2", ordre = 1, adapter = AdapterBoolean.class)
        private Boolean attribut2;
    }
    Création du moteur (prend la liste de classe à gérer en paramètre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MoteurCsv moteur = new MoteurCsv(new ArrayList<Class<?>>(Collections.singletonList(ObjetCsv.class)));
    Exemple de lecture de fichier (stream est un inputStream) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<ObjetCsv> objets = moteur.parseInputStream(stream, ObjetCsv.class);
    Exemple d'écriture de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File file = File.createTempFile("objet_csv", "txt");
    moteur.writeFile(file, objets, ObjetCsv.class);

  7. #7
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Effectivement, ça a l'air super intéressant. Du coup, en surcouche d'open csv comme tu disais, ça peut le faire, surtout dans un doa. A ressemble presque à du jpa.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Sur la ressemblance à du JPA, je faisait justement pas mal de JPA à l'époque ou je l'ai codé

    Sur modifier mon "String.split" par un open-csv, ça pourrait être sympa, par contre faut que je regarde open-csv pour vérifier que cela est compatible avec mon utilisation principale qui est sur une application android (taille jar, compatibilité dalvik, ...).

    (ravi d'en discuter avec quelqu'un ).

  9. #9
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Une des missions de developpez.com est d'encourager les bonnes initiatives. En outre ta lib m'intéresse carrément. Ce que je te propose, c'est de me décontracter directement à la fin du mois (je dois finir d'abord plusieurs trucs, notamment pour devoxx, sans oublier la compta...) et on voit ce qu'on peut faire. L'idéal serait de prolonger ce tutoriel avec l'utilisation de ta lib. Il faudra juste qu'elle soit dispo avec maven et ready. D'ici là je e laisse le soin d'avancer le sujet de ton côté. N'hésite pas à me tenir au courant. En tous cas bon travail.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Pour la dispo avec Maven, c'est déjà le cas :
    repo : https://repository-ybonnel.forge.cloudbees.com/release
    groupId : fr.ybo
    artifactId : moteurcsv

    Je regarde pour y mettre open-csv sur la couche de lecture de csv pour la rendre plus robuste.

    Voici mon mail : ybonnel@gmail.com

    On se verra sans doute à Devoxx France

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 44
    Points
    44
    Par défaut
    Voici l'implémentation de l'article avec MoteurCsv :
    https://github.com/ybonnel/notes4_do.....useMoteurCsv

  12. #12
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Grosse mise-à-jour :
    http://thierry-leriche-dessirier.dev...sv-5-min/#L1-C

    Ajout d'un exemple d'utilisation de la lib MoteurCsv en annexe.
    http://thierry-leriche-dessirier.dev...sv-5-min/#L6-C
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  13. #13
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    màj : 12 juillet 2012

    La version 1.2.0 de la lib MoteurCsv avec un objet "Resultat" en retour de la méthode "parseInputStream()" et la méthode "parseFileAndInsert()" qui ressemble à s'y méprendre à de la programmation fonctionnelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private final static char SEPARATOR = ';';
    private final static String RESOURCES_PATH = "src/main/resources/";
    private final static String ELEVES_FILE_NAME = "eleves.csv";
     
    // Moteur CSV
    private final static MoteurCsv moteurCsv = new MoteurCsv(Eleve.class);
     
    @Override
    public List<Eleve> findEleves() {
     
    	Resultat<Eleve> resultat =  moteurCsv.parseInputStream(new FileInputStream(new File(RESOURCES_PATH + ELEVES_FILE_NAME)), Eleve.class);
    	List<Eleve> eleves = resultat.getObjets();
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    final List<Eleve> eleves = newArrayList(); // Static factory Guava
    moteurCsv.parseFileAndInsert(fr, Eleve.class, new InsertObject<Eleve>() {
     
    	@Override
    	public void insertObject(Eleve eleve) {
    		foo(eleve); // Faire un truc sur l'eleve.
    		...
    		result.add(eleve); // Mettre dans la liste, si besoin.
    		...
    		System.out.println(eleve); // Un petit sysout pour le plaisir.
    	}
    });
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

Discussions similaires

  1. Charger des donnés depuis un fichier .txt
    Par Rifano dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/07/2009, 11h59

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