如何在Perl中将多个日历(iCal格式)合并为一个?

如何在Perl中将多个日历(iCal格式)合并为一个?,perl,file,date,icalendar,Perl,File,Date,Icalendar,我有几个不重叠的ical文件,我想合并成一个ical文件。 做这件事的首选方法是什么?有两个选项(从对任务最不有用到最有用的顺序排列): 如果希望使用“标准”日期时间模块集进行日期时间操作,可以使用解析和打印日历。但是,该模块解析的是iCal格式的数据,而不是文件 为了解析/组合多个文件,可以使用。概要(见botom第3行): 或 但是,至少据我所知,该模块不会将合并后的数据打印回文件 模块集具有解析和打印功能,主模块能够生成文件 我无法找到如何正式合并不同的日历,但通过循环第二个日历对象的条

我有几个不重叠的ical文件,我想合并成一个ical文件。

做这件事的首选方法是什么?

有两个选项(从对任务最不有用到最有用的顺序排列):

  • 如果希望使用“标准”日期时间模块集进行日期时间操作,可以使用解析和打印日历。但是,该模块解析的是iCal格式的数据,而不是文件

  • 为了解析/组合多个文件,可以使用。概要(见botom第3行):

    但是,至少据我所知,该模块不会将合并后的数据打印回文件

  • 模块集具有解析和打印功能,主模块能够生成文件

    我无法找到如何正式合并不同的日历,但通过循环第二个日历对象的
    条目
    属性
    (一个是arrayref,一个是散列)并使用
    添加项()
    添加属性()要合并的第一个日历对象的

  • 我认为您还应该能够将
    ical::Parser
    合并的数据转换为
    data::ical
    ,因为前者生成
    Text::vFile::asData
    对象的列表(日期替换为
    DateTime
    对象);后者有
    parse_object()
    方法来解析
    Text::vFile::asData
    对象


我最终连接了每个没有页眉/页脚的文件,并手动添加了页眉/页脚。
(我无法在两天内接受我自己的答案)

在阅读了@knarf和support.google.com的正确(自我)答案后,我成功地使用了以下方法:

mergeIcal() {
    sed -e '$d' $1
    sed -e '1,/VEVENT/{/VEVENT/p;d}' $2
}
这将获取整个第一个参数文件,但不包括最后一行(页脚),并连接第二个参数文件(不带页眉)


当最常见的日历代理加载时,事件复制将自动删除。

文档似乎没有解释如何导出/输出完整的日历,我不确定它是否符合我的要求。关于合并也没有什么。但是,
ical::Parser
似乎无法输出ical文件(我认为,这是OP想要对合并数据执行的操作)。@knarf-你在谈论两种方法中的哪一种?@Mich-这就是为什么我添加了一个粗体文本“此模块不会将合并后的数据打印回文件”-然后提供了两个额外的要点,说明如何打印。@DVK:好的,在你添加之前我做了评论。是的,这就是我要推荐的。格式是纯文本文件,您可以简单地将它们合并到一个文件中。我甚至都不会为剧本操心。@David W.-这是一次很好的机会。不适用于常规流程。@DVK:这听起来像是一次性的请求。我最近也做过类似的事情,我妻子的电脑坏了,她借了我的几个月,然后给自己买了一台新的。我不得不合并她的旧通讯录备份,她在我的系统上创建的备份和她在新计算机上创建的备份。@David-heh。。。我是一个开发者。我对手动一次性解决方案有一种天生的偏见:)
use iCal::Parser;
my $combined=iCal::Parser->new->parse(@files); #### BINGO!!!!!
mergeIcal() {
    sed -e '$d' $1
    sed -e '1,/VEVENT/{/VEVENT/p;d}' $2
}