Parser un fichier .ICS

networkingprogramming Messages postés 1 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 8 mai 2008 - 8 mai 2008 à 16:55
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 8 mai 2008 à 18:50
Bonjour,

Je doit parser un fichier .ics de type :

BEGIN:VEVENT
DTSTAMP:20080321T083119Z
CREATED:20080321T083038Z
UID:688@campus.fr
LAST-MODIFIED:20080321T083038Z
DESCRIPTION:
SUMMARY:Projet N4
STATUS:CONFIRMED
DTSTART:20080305T130000Z
DTEND:20080305T170000Z
TRANSP:OPAQUE
END:VEVENT

BEGIN:VEVENT
DTSTAMP:20080321T083119Z
CREATED:20080321T083038Z
UID:659@campus.fr
LAST-MODIFIED:20080321T083038Z
DESCRIPTION:N4D21
SUMMARY:Anglais
LOCATION:A811
STATUS:CONFIRMED
DTSTART:20080325T091500Z
DTEND:20080325T110000Z
TRANSP:OPAQUE
END:VEVENT

BEGIN:VEVENT
DTSTAMP:20080321T083119Z
...

Dans le but d' utiliser les dates et heures des evenements.
C'est à dire que mon code php retournera:

tache 1 le :
2008 03 05
à  13:00
jusque 17:00

tache 2 le : 2008 03 25
à 09:15 jusque
11:00

 ...

J'essaye d'utiliser la fonction "preg_match_all" mais je n'arrive pas à l'utiliser correctement.

Voici mon debut de code:

<?php
    $contenuFichier = file_get_contents("fichier_ics.ics");
    $expressionRationnelle = " ? "; //je ne sais pas quoi mettre ici
    $resultat = Array();

    preg_match_all($expressionRationnelle, $contenuFichier, $resultat, PREG_PATTERN_ORDER);

    // $resultat devrait contenir toutes les séquences recherchées. On les affiche pour vérification :
    foreach ($resultat[0] as $numero => $date)
    {
        echo "tache $numero le$date";
    }
    ?>

merci d'avance.

1 réponse

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 mai 2008 à 18:50
Salut,

La principale question, est : que souhaites-tu récupérer dans ce fichier ?
Une seule PCRE ne te permettra pas de parser tout le fichier pour en tirer toutes les informations qu'il contient.
Si tu veux juste récupérer les dates :
$pcre1 = '`^DTSTART:([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2])([0-9]{2])([0-9]{2])Z$`m';
$pcre2 = '`^DTEND:([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2])([0-9]{2])([0-9]{2])Z$`m';

Ca retourne chaque morceau des dates. Dans l'ordre :
- année
- mois
- jour
- heure
- minutes
- secondes
<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Rejoignez-nous