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

Android Discussion :

Traitement d'un fichier ics (iCalendar)


Sujet :

Android

  1. #1
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut Traitement d'un fichier ics (iCalendar)
    Bonjour,

    Existe-t-il des fonctions pour parcourir et traiter les fichiers ics (comme cela existe pour les fichiers xml) ?

    Dans la même optique, existe-t-il des fonctions pour directement insérer des évènement au format ics dans le calendrier (agenda) ?

    Quelqu'un aurait-il un exemple de code qui traite les rendez-vous (évènements) de l'agenda ?

    Merci d'avance.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  2. #2
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je crois que tu vas être content ;-)
    y'a une API écrit en Java : iCal4j qui contient ce qu'il faut pour parser un fichier ics et même faire l'opération inverse càd créer des fichier ics. Utile si tu veux des opérations d'import/export de fichier en ics.

    Cette API est en Open Source et documenté, le forum bouge pas mal dans le sens où les gens répondent aux questions

    Je te donne le lien sans trop tarder:
    http://ical4j.sourceforge.net/introduction.html

    t'as accès au Wiki, documentation, sources, forum...

    --
    Bouchra

  3. #3
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci beaucoup !

    En fait j'allais commencer à écrire une procédure qui lit le fichier ics et en tire les différents event... Autant utiliser la librairie !
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  4. #4
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Pour ceux que ça intéresse, et étant donné que j'ai cherché un peu avant de trouver, pour importer cette librairie dans son projet, il faut :
    1. cliquer droit sur le projet (dans eclipse, fenêtre projets)
    2. cliquer sur "properties"
    3. dans la fenêtre qui s'ouvre, sélectionner à gauche "java build path"
    4. à droite, cliquer sur le bouton "Add External JARs"
    5. donner le chemin vers le fichier .jar et valider, puis OK
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  5. #5
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Encore merci pour cette info bellach, j'ai enfin réussi à faire un code qui est censé (pas encore testé) récupérer les EVENts d'un fichier ics et mettre certains champs dans une chaine pour un affichage.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Parsing du fichier ics : créé l'arborescence avec les events
    //try {
    	//FileInputStream fin = new FileInputStream("planning.ics");
    	CalendarBuilder builder = new CalendarBuilder();
    	try {
    		//Calendar calendar = builder.build(fin);
        	        Calendar calendar = builder.build(getResources().openRawResource(R.raw.planning));
        	        StringBuilder b = new StringBuilder();
        	        for (Object event : calendar.getComponents(Component.VEVENT)) {
        		        if (((VEvent) event).getSummary() != null) {
        			        b.append("\n\n");
        			        b.append(((VEvent) event).getSummary().getValue());
        			        b.append(": ");
        			        b.append(((VEvent) event).getStartDate().getDate());
    				// ou traitement du rendez-vous dont le champ SUMMARY n'est pas vide
                            }
        		}
        	}
    	} catch (IOException e) {
    		// Erreur : I/O
    		Toast.makeText(getApplicationContext(), "Erreur : IOException", Toast.LENGTH_LONG).show();
    	} catch (ParserException e) {
    		// Erreur de parsing (donnée lue non valide)
    		Toast.makeText(getApplicationContext(), "Erreur : Parser", Toast.LENGTH_LONG).show();
    	}
    //} catch (FileNotFoundException e1) {
    //	// Erreur : le fichier n'existe pas
    //	Toast.makeText(getApplicationContext(), "Erreur : fichier inexistant", Toast.LENGTH_LONG).show();
    //}
    NB : il faut ajouter la librairie commons-lang-2.4.jar de la même manière que ical4j.jar. J'ai aussi laissé en commentaire le code pour effectuer le parsing à partir d'un fichier ics (sinon le fichier planning.ics doir être placé dans le répertoire raw.

    Il faudra importer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import net.fortuna.ical4j.data.CalendarBuilder;
    import net.fortuna.ical4j.data.ParserException;
    import net.fortuna.ical4j.model.Calendar;
    import net.fortuna.ical4j.model.Component;
    import net.fortuna.ical4j.model.component.VEvent;
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  6. #6
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Malheureusement, après de nombreux essais, impossible de faire fonctionner cette librairie (problème au niveau d'Eclipse ?).

    Je jette l'éponge, j'y ai passé trop de temps, je vais développer moi même la fonction de parcours du fichier ics, finalement ce n'est pas très compliqué.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  7. #7
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Citation Envoyé par cad13 Voir le message
    Malheureusement, après de nombreux essais, impossible de faire fonctionner cette librairie (problème au niveau d'Eclipse ?).

    Je jette l'éponge, j'y ai passé trop de temps, je vais développer moi même la fonction de parcours du fichier ics, finalement ce n'est pas très compliqué.
    Tu as raison souvent travailler avec des fichiers jar c'est trop compliqué....
    Il faut oser developper pour toi meme.

  8. #8
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Citation Envoyé par cad13 Voir le message
    Je jette l'éponge, j'y ai passé trop de temps, je vais développer moi même la fonction de parcours du fichier ics, finalement ce n'est pas très compliqué.
    Mais cad13 tu a rapidement posé le problème commme "Resolu" Ceci est trop tot!
    Abandonner ne veut pas dire resolu.

  9. #9
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Tu as raison, le résolu était prématuré, j'ai donc fait une procédure qui lit un fichier ics et retire les champs qui m'intéressent.

    Voici le code pour ceux qui veulent aussi traiter un fichier ics :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    public void ParcoursICS() {
    // Parcours le fichier ics et récupère les rendez-vous
     
    	try {
    		// ouverture du fichier texte (.ics)
    		BufferedReader planning = new BufferedReader(new  FileReader("planning.ics"));
    		ligne = planning.readLine();
    		while (!ligne.equalsIgnoreCase("END:VCALENDAR") && ligne != null) {
    			if (ligne.equalsIgnoreCase("BEGIN:VEVENT")) {
    				// Rendez-vous à prendre en compte
    				ligne = planning.readLine();
    				while (!ligne.equalsIgnoreCase("END:VEVENT")) {
    					// récupération des informations utiles
    					if (ligne.equalsIgnoreCase("DTSTART")) {
    						// date et heure de début du rendez-vous
     
    					}
    					else if (ligne.equalsIgnoreCase("DTEND")) {
    						// date et heure de fin du rendez-vous
     
    					}
    					else if (ligne.equalsIgnoreCase("LOCATION")) {
    						// lieu du début du rendez-vous
     
    					}
    					else if (ligne.equalsIgnoreCase("DTSTAMP")) {
    						// date et heure de création du planning (utile pour savoir s'il a été modifié)
     
    					}
    					else if (ligne.equalsIgnoreCase("DESCRIPTION")) {
    						// description du rendez-vous (avec coordonnées PEQ)
     
    					}
    					else if (ligne.equalsIgnoreCase("SUMMARY")) {
    						// numéro de vol ou type de rendez-vous (hotel par exemple)
     
    					}
    					ligne = planning.readLine();
    				}
    				// traitement du rendez-vous : 1. mise en forme en fct des options, 2. création du rendez-vous dans l'agenda
     
    			}
    			ligne = planning.readLine();
    		}
     
    	}
    	catch (FileNotFoundException e1) {
    		// Erreur : le fichier n'existe pas
    		Toast.makeText(getApplicationContext(), "Erreur : fichier ics inexistant", Toast.LENGTH_LONG).show();
    	} catch (IOException e) {
    		// Erreur : problème de lecture fichier
    		Toast.makeText(getApplicationContext(), "Erreur : problème de lecture du fichier ics", Toast.LENGTH_LONG).show();
    	}
    }
    PS : le ligne.equalsIgnoreCase n'est à priori pas nécessaire car si le fichier ics est correct, les mots clés doivent être en majuscules, j'aurais pu mettre ligne.equals tout simplement, mais on ne sait jamais...
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  10. #10
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Petite modification à apporter à mon code : ce n'est pas toute la ligne qu'il faut tester pour les mots clés, mais seulement les x premiers caractères...

    Par exemple pour DTSTART, si la ligne est DTSTART:20100417T190000Z, il faut tester les 7 premiers caractères.

    Autrement dit il faut faire tester ligne.substring(0,7) et non ligne
    Christian
    Nexus 1 sous Cyanogen - Acer A500

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement de gros fichiers
    Par Seth77 dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2006, 15h53
  2. Java et XML : Traitement d'un fichier XML avec JAVA
    Par nice dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 18/05/2006, 21h24
  3. [INFO] Traitement d'un fichier texte
    Par doudine dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 25/04/2006, 09h23
  4. [VBA-E]Traitement d'un fichier excel
    Par climz dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/04/2006, 14h28
  5. [C#] [XML] Traitement de gros fichiers XML (90 Mo)
    Par Pulsahr dans le forum Windows Forms
    Réponses: 20
    Dernier message: 01/12/2005, 14h40

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