Подтвердить что ты не робот

Excel сохраняет файлы с разделителями табуляции без новой строки (UNIX/Mac os X)

Это обычная проблема, которая у меня есть, и мое решение немного нахально. Поэтому я ищу быстрое исправление и объяснение проблемы.

Проблема заключается в том, что когда я решаю сохранить таблицу в excel (mac 2011) в виде файла с разделителями табуляции, кажется, что это прекрасно. Пока я не попытаюсь проанализировать файл строки за строкой, используя Perl. По какой-то причине он разбивает весь документ в одной строке.

Мое грубое решение - открыть файл в веб-браузере и скопировать и вставить информацию в файл с разделителями табуляции в TextEdit (я никогда не использую формат форматированного текста). Я попытался представить новую строку в конце файла перед выполнением этого исправления, и это не решит проблему.

Что здесь происходит? Было бы полезно получить объяснение.

~ Спасибо! ~

4b9b3361

Ответ 1

Проблема - это коды символов, которые определяют новые строки в разных системах. Системы Windows обычно используют системы CarriageReturn + LineFeed (CRLF) и * NIX, которые используют только LineFeed (LF).

Эти символы могут быть представлены в RegEx как \r\n или \n (соответственно).

Иногда, чтобы хэш через текстовый файл, вы должны разбирать символы новой строки. Попробуйте это для DOS-UNIX в perl:

perl -pi -e 's/\r\n/\n/g' input.file

или для UNIX-DOS с использованием sed:

$ sed 's/$'"/`echo \\\r`/" input.txt > output.txt

или для DOS-UNIX с использованием sed:

$ sed 's/^M$//' input.txt > output.txt

Ответ 2

Нашел довольно простое решение. Скопируйте данные из Excel в буфер обмена, вставьте их в электронную таблицу google. Загрузите файл электронной таблицы google как "значения, разделенные вкладками .tsv". Это обострило проблему, и у вас есть разделители вкладок с концом строки для каждой строки.

Ответ 3

Еще одно решение...

  • для файла с разделителями табуляции, сохраните документ как тип файла Windows Formatted Text (.txt)
  • для файла с разделителями-запятыми, сохраните документ в виде файла `Windows Comma Separated (.csv) '

Ответ 4

Perl имеет полезный шаблон регулярного выражения \R, который будет соответствовать любой общей строке. Он фактически соответствует любому вертикальному пробелу - то же, что и \v - или комбинации CR LF, поэтому он совпадает с \r\n|\v

Это полезно здесь, потому что вы можете скопировать весь свой файл в один скаляр, а затем split /\R/, который предоставит вам список файлов, уже chomp ed (если вы хотите сохранить терминаторы строк, вы можете split /\R\K/ вместо

Другим вариантом является PerlIO::eol. Он обеспечивает новый уровень ввода-вывода Perl, который будет нормализовать окончания строк независимо от того, что содержимое файла

После того, как вы загрузили модуль с помощью use PerlIO::eol, вы можете использовать его в инструкции open

open my $fh, '<:eol(LF)', 'myfile.tsv' or die $!;

или вы можете использовать open pragma, чтобы установить его как уровень по умолчанию для всех дескрипторов входных файлов

use open IN  => ':raw:eol(LF)';

который отлично работает с входным файлом с любой платформы