Perl Slurp в Excel CSV-файл

Я анализирую файл Excel CSV в OSX El Capitan, CSV здесь

Проблема в том, что переводы строки помечены как \x0d (CR).

1] Я смог преобразовать файл с новыми строками, установленными как 'x0a' (NL) с

$> perl -e 'open(fh, "<coord2.csv") or die("can t open file"); 
   binmode(fh); $/=\10; 
   while ($t=<fh>) { $t =~ s/\x0d/\x0a/g; print "$t"; } print "\n"; '

но до этого я попробовал два других пути, и они потерпели неудачу, я хотел бы знать, есть ли у вас некоторые объяснения по причине их неудачи.

2] Я пытался на время заморозить все файлы сразу:

$> cat coord2.csv | perl -e 'undef $/; $t=<>; print "$t \n"; '

но в выводе я не вижу весь файл, я вижу только:

Prelevacampioni ZARA;45.0640, 11.1943;F ;F 9.954467;F00;F599242;F

3] Я пытался также установить $/ переменная, с:

$> cat coord2.csv | perl -e '$/="\x0d"; @L=<>; 
                       for (@L) { print $_; } print "\n"; '

но опять же, я вижу только тот же вывод, что и в пункте [2].

Я озадачен, можете ли вы объяснить мне, что я делаю неправильно в пунктах [2] и [3]?

1 ответ

Благодаря комментарию мне удалось понять это странное поведение в примерах [2] и [3]. Я пишу здесь решение для людей, которые могут в будущем иметь такую ​​же проблему.

Дело в том, что OSX кодирует символы новой строки с помощью NL ='\n' = 'x0a', а в конце файла строки CVS кодируются с помощью CR = '\r' = 'x0d'. Perl правильно читал строки, но вывод был искажен, потому что CR сохранял запись Perl всегда на одной и той же строке.

Итак, исправленный код для примеров [2] и [3]:

[2] $> cat coord2.csv | perl -e 'undef $/; $t=<>; 
           $t =~ s/\x0d/\x0a/g; print "$t \n"; '


[3] $> cat coord2.csv | perl -e '$/="\x0d"; @L=<>; 
          for (@L) { s/\x0d/\x0a/g; print $_; } print "\n"; '
Другие вопросы по тегам