Frage

Ich suche eine einfache Möglichkeit, Vcalendar-Daten mit Objective-C zu analysieren. Insbesondere alles, worum es geht, sind die Freebusy -Daten (siehe unten):

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

Ich habe es versucht, es durch die Verwendung von Komponenten zu analysieren, die untersendet werden:@" n", aber es gibt ein n in einem Teil der Freebusy -Daten, was dazu führt, dass sie nicht richtig analysiert.

Gibt es etwas einfach, das mir fehlt?

War es hilfreich?

Lösung

Das \n In der Mitte der freien Freesibilität sind Daten Teil der Icalendar -Spezifikation; entsprechend RFC 2445, Die Newline, gefolgt von einem Platz, ist die richtige Möglichkeit, lange Linien zu teilen, sodass Sie wahrscheinlich einen Großteil davon beim Scannen von Freebusy -Daten sehen werden.

Wie Nathan vorschlägt, ein NSScanner Möglicherweise benötigen Sie alles, was Sie benötigen, wenn die von Ihnen erwarteten Daten einigermaßen konsistent sind. In Icalendar gibt es jedoch eine Reihe von Launen, daher benutze ich mich oft oft libisch ICS -Info analysieren. Ein schnelles und schädliches Beispiel für das Parsen dieser Daten mit 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);
}

Die Dokumentation für Libical ist im Projekt Download selbst (siehe UsingLibical.txt). Es gibt auch dieses schöne Tutorial zum Versand libisch in Ihrem Anwendungsbündel.

Andere Tipps

Sich ansehen NSSCANNER.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top