Question

Je cherche un moyen facile d'analyser les données VCALENDAR avec c-objectif. Plus précisément tout ce que je suis préoccupé par les données est de FreeBusy (voir ci-dessous):

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VFREEBUSY
UID:XYZ-DONT-CARE
DTSTART:20090605T070000Z
DTEND:20090606T070000Z
ATTENDEE:/principals/__uids__/ABC1234-53D8-4079-8392-01274F97F5E1/
DTSTAMP:20090605T075430Z
FREEBUSY;FBTYPE=BUSY:20090605T170000Z/20090605T200000Z,20090605T223000Z/20
 090606T003000Z
FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20090605T070000Z/20090605T150000Z,2009060
 6T010000Z/20090606T070000Z
ORGANIZER:/principals/__uids__/ABC1234-53D8-4079-8392-01274F97F5E1/
END:VFREEBUSY
END:VCALENDAR

Je l'ai essayé de l'analyser en utilisant componentsSeparatedByString: @ « \ n », mais il y a une \ n dans une partie des données de FreeBusy, l'amenant à ne pas fonctionner correctement parser

.

Y at-il quelque chose de facile que je suis absent?

Était-ce utile?

La solution

Le \n au milieu de données FREEBUSY est une partie de la spécification iCalendar; selon RFC 2445 , le saut de ligne suivi d'un espace est la bonne manière de diviser de longues lignes, de sorte que vous verrez probablement beaucoup de cela dans les données FreeBusy de balayage.

Nathan suggère, un NSScanner peut être tout ce dont vous avez besoin si les données que vous attendez sera raisonnablement cohérente. Il y a un certain nombre de caprices iCalendar, cependant, donc je me surprends souvent à l'aide de libical pour analyser les informations ics . Un exemple rapide et sale de l'analyse de ces données en utilisant libical:

NSString *caldata = @"BEGIN:VCALENDAR\nVERS....etc";

icalcomponent *root = icalparser_parse_string([caldata cStringUsingEncoding:NSUTF8StringEncoding]);

if (root) {

    icalcomponent *c = icalcomponent_get_first_component(root, ICAL_VFREEBUSY_COMPONENT);

    while (c) {
        icalproperty *p = icalcomponent_get_first_property(c, ICAL_FREEBUSY_PROPERTY);

        while (p) {
            icalvalue *v = icalproperty_get_value(p);
            // This gives: 20090605T170000Z/20090605T200000Z
            // (note that stringWithCString is deprecated)
            NSLog(@"FREEBUSY Value: %@", [NSString stringWithCString:icalvalue_as_ical_string(v)]);
            icalparameter *m = icalproperty_get_first_parameter(p, ICAL_FBTYPE_PARAMETER);

            while (m) {
                // This gives: FBTYPE=BUSY
                NSLog(@"Parameter: %@", [NSString stringWithCString:icalparameter_as_ical_string(m)]);
                m = icalproperty_get_next_parameter(p, ICAL_FBTYPE_PARAMETER);
            }

            p = icalcomponent_get_next_property(c, ICAL_FREEBUSY_PROPERTY);
        }

        c = icalcomponent_get_next_component(root, ICAL_VFREEBUSY_COMPONENT);
    }

    icalcomponent_free(root);
}

Documentation pour libical est dans le projet téléchargement lui-même (voir UsingLibical.txt). Il y a aussi ce beau tutoriel sur l'expédition libical dans votre paquet d'applications .

Autres conseils

Jetez un oeil à NSScanner .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top