1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl
use strict;
use warnings;
use Tie::iCal;
use Data::Dumper;
use Text::CSV;
# erzeuge neues Text::CSV objekt - mit Win32-Zeilenumbruechen, ;.
# binary => 1, da in den Texten auch Newlines vorkommen koennen
my $csv = Text::CSV->new({
eol => "\r\n",
sep_char => ";",
binary => 1,
});
# lies die iCal-Datei ein
tie my %ical, 'Tie::iCal', 'test.ics' or die "Problem: $!";
# oeffne Dateihandle fuer CSV-Datei
open my $out_fh, '>', 'test.csv' or die "Problem bei Erstellung der CSV: $!";
# gib die Spaltennamen aus
$csv->print( $out_fh, [ qw(DATE SUMMARY DESCRIPTION) ] );
for my $event ( keys %ical ) {
my $event_data = $ical{$event}->[1];
my $date = $event_data->{DTSTART}->[1];
my $summary = $event_data->{SUMMARY};
my $description = $event_data->{DESCRIPTION};
# mehrzeilige Beschreibungen sind in einer Arrayreferenz
$description = join "\r\n", @{$description} if ref $description;
$csv->print( $out_fh, [ $date, $summary, $description ] );
}
close $out_fh;
untie %ical;