Leser: 31
1
2
3
4
5
6
7
8
9
10
11
12
while(<IN>)
{
if (substr($_,0,12) eq 'DESCRIPTION:') {
$laenge = length($_);
print OUT "\"",substr($_,12,$laenge-14),"\";"}
if (substr($_,0,8) eq 'SUMMARY:') {
$laenge = length($_);
print OUT "\"",substr($_,8,$laenge-10),"\";"}
if (substr($_,0,8) eq 'DTSTART;') {
print OUT substr($_,27,8),"\n"};
};
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl use strict; use warnings; use Tie::iCal; use Data::Dumper; tie my %ical, 'Tie::iCal', 'Community.ics' or die "Problem: $!"; warn Dumper \%ical; untie %ical;
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
42
43
BEGIN:VJOURNAL
DTSTAMP:20091216T152458Z
ORGANIZER;CN=Richard:MAILTO:
CREATED:20090903T180158Z
UID:libkcal-1654442125.506
LAST-MODIFIED:20090903T180158Z
DESCRIPTION:Auswertung Wassergehalt
SUMMARY:10diff
DTSTART;TZID=Europe/Berlin:20090904T200100
END:VJOURNAL
BEGIN:VJOURNAL
DTSTAMP:20091216T152458Z
ORGANIZER;CN=Richard:MAILTO:
CREATED:20090911T074039Z
UID:libkcal-401275217.878
LAST-MODIFIED:20090911T074039Z
DESCRIPTION:Eine sehr lange description, die ueber
mehrere Zeilen geht - nein, nicht nur ueber zwei,
sondern sogar drei.
# Die Zeilen 2 und 3 der obigen Description besitzen im Original ein Leerzeichen am Zeilenbeginn, das hier nicht mit rübergekommen ist.
SUMMARY:9diff
DTSTART;TZID=Europe/Berlin:20090907T094000
END:VJOURNAL
1
2
3
DATE;SUMMARY;DESCRIPTION [cr/lf]
20090904;"10diff";"Auswertung Wassergehalt" [cr/lf]
20091216;"9diff";"Eine sehr lange description, die ueber mehrere Zeilen geht - nein, nicht nur ueber zwei, sondern sogar drei." [cr/lf]
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;