Я работаю над переходом с MDaemon на Google Apps. В рамках этого процесса я экспортирую контакты и календари для всех наших пользователей в файлы CSV, затем читаю их в сценарий perl и импортирую в Службы Google.
Вот пример экспорта календаря, показанного в vi с включенным «:set list».
"Event 1","05/05/2009","0:00:00","05
/05/2009","23:59:00","True","True","05/04/2009","23:45:00",,,,"",,,"False","Normal",0$
"Event 2","09/21/2009","11:00:00","09/21/2009","11:30:00","False","False",,,"email@TELUS.COM","",,"Notes from=A0^M$
Vendor=A0",,"","False","Normal",1$
"Event 3","04/05/2010","0:00:00","04/05/2010","23:59:00","True","True","04/04/2010","23:45:00",,,,"",,,"False","Normal",0$
"Event 4","05/05/2010","0:00:00","05/05/2010","23:59:00","True","True","05/04/2010","23:45:00",,,,"",,,"False","Normal",0$
У меня проблемы со строками, оканчивающимися на ^ M $, которые должны быть встроенными в конец. Мой анализатор CSV Text::CSV_XS анализирует их как несколько строк, а не как одну строку. Как я могу заменить ^ M $ на ^ M? Любые другие предложения приветствуются.
Вот мой код разбора:
my $csv = Text::CSV_XS->new ({ binary => 1, eol => $/,auto_diag => 1 }) or
die "Cannot use CSV: ".Text::CSV_XS->error_diag ();
open my $fh, "<", $username . "-calendar.csv" or die $!;
while (my $row = $csv->getline ($fh)) {
print STDERR "NEW LINE: " . Dumper($row) . "END NEW LINE\n";
push @rows, $row;
}
$csv->eof or $csv->error_diag ();
close $fh;
ОБНОВЛЕНИЕ 1: Вот вывод из "файла" относительно этого файла:
Non-ISO extended-ASCII English text, with very long lines, with CRLF, LF line terminators