Question

Je suis en train d'écrire une classe qui peut analyser un fichier iCalendar et je suis frappé des murs en briques. Chaque ligne peut être dans le format suivant:

PARAMETER[;PARAM_PROPERTY..]:VALUE[,VALUE2..]

Il est assez facile à analyser avec soit un tas de division ou de regex jusqu'à ce que vous découvrez que les valeurs peuvent avoir des virgules backticked, ils peuvent aussi être guillemet marquée qui rend la vie difficile. par exemple:

PARAMETER:"my , cool, value",value\,2,value3

Dans cet exemple, vous êtes censé retirer les trois valeurs:

  • ma valeur fraîche
  • valeur, 2
  • value3

Ce qui le rend un peu plus difficile.

Suggestions?

Était-ce utile?

La solution

Allez dans le fichier ombles par char et de diviser les valeurs manuellement, chaque fois que vous avez un guillemet vous entrez « mode citation » où vous ne serez pas diviser à virgules et quand le guillemet de fermeture vient vous laisser.

Pour les virgules backticked. Si vous lisez dans une barre oblique inverse lire également le caractère suivant et décider quoi faire avec elle alors

Bien sûr, ce n'est pas très efficace, mais vous ne pouvez pas utiliser des expressions régulières pour cela. Je veux dire que vous pouvez, mais comme je crois qu'il peut aussi être échappées entre guillemets cela va être vraiment désordre.

Si vous voulez l'essayer si:

  • commençons en faisant correspondre un guillemet suivi de caractères qui ne sont pas: "[^"]*"
  • pour surmonter le problème des caractères échappées vous pouvez utiliser lookaheads (?<!\\)"[^"]*(?<!\\)"
  • maintenant il cassera si les guillemets sont échappées de la valeur, peut-être cela fonctionne? (Ont pas testé) (?<!\\)"[^"|(?<=\\)"]*(?<!\\)"

Donc, vous voyez très vite get désordre, donc je vous suggère de le lire dans characterwise.

Autres conseils

J'ai eu les mêmes problèmes. Je l'ai trouvé un peu difficile à tourner « tout » fichier iCalendar dans une structure objet PHP utilisable / tableau, donc au lieu que j'essaie de convertir iCalendar xcal.

Ceci est ma mise en œuvre:

http: / /code.google.com/p/sabredav/source/browse/branches/caldav/lib/Sabre/CalDAV/ICalendarToXML.php

Je dois dire que ce script n'est pas complètement testé, mais il pourrait être suffisant pour obtenir votre commencé.

Avez-vous essayé tirer quelque chose de http://phpicalendar.net/ ?

Est-ce le projet que vous pensez? Je suis le auther :) La première version utilisable (de v0.1.0) devrait être prêt dans environ un mois. Il est capable de travailler avec environ 85% de la spécification iCalendar en ce moment, mais les événements récurrents sont vraiment difficiles. Je travaille sur eux en ce moment. Une fois que ceux-ci sont complets, la bibliothèque sera tout à fait capable de faire quoi que ce soit dans les spécifications.

Qcal Google Code page d'accueil

Amusez-vous!

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