#!/usr/bin/perl -w use POSIX qw(strftime); my $nowstring = strftime "%Y%m%dT%H%M%SZ", gmtime; use strict; use Text::CSV_XS; # get columns from header line my $csv = Text::CSV_XS->new(); my $header_line = ; $csv->parse($header_line); my @columns = $csv->fields(); my @row; print "BEGIN:VCALENDAR\n" . "VERSION:2.0\n" . "PRODID:-//CSV To iCal Convertor//m-web\@goof.com//EN\n" . "METHOD:PUBLISH\n" . "CALSCALE:GREGORIAN\n" . "X-WR-TIMEZONE;VALUE=TEXT:US/Eastern\n" . "X-WR-CALNAME;VALUE=TEXT:LLMMEADYAHOOCOM\n"; while () { # join lines if embedded newlines while (! /"$/) { chomp; my $newline = "$_ "; $newline .= ; $_ = $newline; }; $csv->parse($_); @row = $csv->fields($_); if (!@row){ print "something wrong, status=", $csv->status(), " record = [$_]"; }; my $startdate = $row[1]; my $enddate = $row[3]; my $starttime = $row[2]; my $endtime = $row[4]; my $newstartdate; my $newenddate; my $hour; my $minute; my $pm; my $year; my $month; my $day; ($month, $day, $year) = $startdate =~ /(\d{1,2})\/(\d{1,2})\/(\d{4})/; if ($starttime ne "") { ($hour, $minute, $pm) = $starttime =~ /(\d{1,2}):(\d{1,2})\s+(AM|PM)/; if ($pm eq "PM" && $hour != 12 ) { $hour += 12; } $newstartdate = sprintf("%4d%2d%2dT%2d%2d00", $year, $month, $day, $hour, $minute); $newstartdate =~ tr/ /0/; } else { $newstartdate = sprintf("%4d%2d%2d", $year, $month, $day); $newstartdate =~ tr/ /0/; } if ($enddate ne "") { ($month, $day, $year) = $enddate =~ /(\d{1,2})\/(\d{1,2})\/(\d{4})/; if ($endtime ne "") { ($hour, $minute, $pm) = $endtime =~ /(\d{1,2}):(\d{1,2})\s+(AM|PM)/; if ($pm eq "PM" ) { $hour += 12; } $newenddate = sprintf("%4d%2d%2dT%2d%2d00", $year, $month, $day, $hour, $minute); $newenddate =~ tr/ /0/; } else { $newenddate = sprintf("%4d%2d%2d", $year, $month, $day); $newenddate =~ tr/ /0/; } } print "BEGIN:VEVENT\nSUMMARY:" . $row[0] . "\nDESCRIPTION:" . $row[0] . " " . $row[6] . "\nDTSTAMP:" . $nowstring . "\nDTSTART:" . $newstartdate . "\n"; if ($enddate ne "") { print "DTEND:" . $newenddate . "\n"; } print "END:VEVENT\n"; }; print "END:VCALENDAR\n";