Как объединить несколько календарей (формат iCal) в один в Perl? - PullRequest
1 голос
/ 20 сентября 2011

У меня есть несколько непересекающихся ical-файлов, которые я хочу объединить в один ical-файл.
Какой предпочтительный способ сделать это?

Ответы [ 3 ]

3 голосов
/ 29 июля 2014

После прочтения правильного (самостоятельного) ответа из @knarf и Форматирования файлов iCalendar на support.google.com я успешно использовал это:

mergeIcal() {
    sed -e '$d' $1
    sed -e '1,/VEVENT/{/VEVENT/p;d}' $2
}

Это занимает целое файл первого аргумента , но не последняя строка (нижний колонтитул) и конкатенация файл второго аргумента без заголовка.

Дублирование событий будет автоматически удалено при загрузке наиболее распространенным агентом календаря.

0 голосов
/ 20 сентября 2011

В итоге я конкатенировал все файлы без их верхнего и нижнего колонтитула и вручную добавил верхний / нижний колонтитулы.
(Я не могу принять свой собственный ответ в течение 2 дней)

0 голосов
/ 20 сентября 2011

Есть пара опций (упорядоченные ИМХО наименее полезные для наиболее полезных для вашей задачи):

  • Если вы предпочитаете использовать «стандартный» набор модулей DateTime для манипуляции с датой и временемВы можете анализировать и распечатывать календари, используя DateTime::Format::ICal.Однако этот модуль анализирует iCal данные, отформатированные, но не файлы.

  • Для анализа / объединения нескольких файлов вы можете использовать iCal::ParserИз ОПИСАНИЯ (см. Строку № 3 из нижней части):

    use iCal::Parser;
    my $parser=iCal::Parser->new();
    my $hash=$parser->parse($file);
    $parser->parse($another_file);
    my $combined=$parser->calendar;
    

    или

    use iCal::Parser;
    my $combined=iCal::Parser->new->parse(@files); #### BINGO!!!!!
    

    Однако этот модуль не печатает полученнуюобъединить данные обратно в файл , по крайней мере, из тех, что мне известны.

  • Data::ICal набор модулей имеет как синтаксический анализ, так и печать, с основным модулем Data :: ICal , способный генерировать файл.

    Я не смог выяснить, как официально объединить различные календари, но это должно быть довольно тривиально, циклически повторяясь за секундуобъекты календаря entries и properties (один массив, один хэш) и использование add_entry() и add_property() первого объекта календаря для слияния.

  • Я думаю, что вытакже должен иметь возможность конвертировать ical::Parser объединенные данные в Data::ICal, поскольку первый создает списки Text::vFile::asData объектов (даты заменяются на DateTime объектов);и последний имеет parse_object() метод для анализа Text::vFile::asData объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...