Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java
Communauté Java Suivez l'actualité et contribuez à la vie de la communauté francophone Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 26/01/2012, 19h36   #1
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 10h30   #2
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
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.
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 10h50   #3
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
Citation:
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 11h45   #4
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
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.
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 12h00   #5
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
Citation:
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 16h15   #6
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
Vi un peu, peut être plus simple dans le mapping (avec des annotations).

Exemple de classe métier :
Code :
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 :
MoteurCsv moteur = new MoteurCsv(new ArrayList<Class<?>>(Collections.singletonList(ObjetCsv.class)));
Exemple de lecture de fichier (stream est un inputStream) :
Code :
List<ObjetCsv> objets = moteur.parseInputStream(stream, ObjetCsv.class);
Exemple d'écriture de fichier :
Code :
1
2
File file = File.createTempFile("objet_csv", "txt");
moteur.writeFile(file, objets, ObjetCsv.class);
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 16h35   #7
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 17h06   #8
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
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 ).
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 19h11   #9
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 08h00   #10
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
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
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 16h31   #11
ybonnel
Candidat au titre de Membre du Club
 
Homme Yan Bonnel
Développeur Java
Inscription : mai 2006
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Yan Bonnel
Âge : 30
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mai 2006
Messages : 8
Points : 12
Points : 12
Voici l'implémentation de l'article avec MoteurCsv :
https://github.com/ybonnel/notes4_do.....useMoteurCsv
ybonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2012, 18h55   #12
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2012, 21h15   #13
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 135
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 135
Points : 5 909
Points : 5 909
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 :
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 :
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
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web