#!/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;