Почему рекомендуется иметь пустую строку в конце файла? - PullRequest
187 голосов
/ 18 февраля 2010

Некоторые инструменты в стиле кода рекомендуют это, и я помню, как некоторые инструменты командной строки Unix предупреждали об отсутствии пустой строки.

В чем причина наличия лишней пустой строки?

Ответы [ 8 ]

153 голосов
/ 18 февраля 2010

Многие старые инструменты ведут себя неправильно, если последняя строка данных в текстовом файле не заканчивается символом перевода строки или возврата каретки / новой строки. Они игнорируют эту строку, поскольку она заканчивается на ^ Z (eof).

37 голосов
/ 21 апреля 2014

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

34 голосов
/ 18 февраля 2010

Кроме того, что при перемещении в конец файла в текстовом редакторе это более приятная позиция курсора.

Наличие новой строки в конце файла обеспечивает простую проверку того, что файлне было усечено.

16 голосов
/ 21 октября 2015

Аргумент также может быть задан для более чистых разностей, если вы добавляете в файл по той же причине, что и Почему Python допускает использование запятой в конце?

15 голосов
/ 18 февраля 2010

Пустая строка в конце файла появляется так, что стандартное чтение из входного потока будет знать, когда прекратить чтение, обычно возвращает EOF, чтобы указать, что вы достигли конца. Большинство языков могут обрабатывать маркер EOF. Именно по этой причине в старые времена под DOS маркером EOF была клавиша F6 или Ctrl-Z, для * nix-систем это был Ctrl-D.

Большинство, если не все, на самом деле будут читать вплоть до маркера EOF, чтобы функция чтения из входной библиотеки во время выполнения знала, когда прекратить чтение дальше. Когда вы открываете поток для режима добавления, он стирает маркер EOF и записывает его после него, пока явно не будет вызвано закрытие, в которое он вставит маркер EOF в этой точке.

Старые инструменты ожидали пустую строку, за которой следовал маркер EOF. В настоящее время инструменты могут обрабатывать пустую строку и игнорировать ее.

8 голосов
/ 14 мая 2013

Также, когда вы изменяете файл и добавляете некоторый код в конец файла - diff (по крайней мере, git diff в стандартной конфигурации) покажет, что вы изменили последнюю строку, а единственное, что вы на самом деле сделали - добавили новую строку условное обозначение. Поэтому отчеты по cvs становятся менее удобными.

4 голосов
/ 18 февраля 2010

Некоторые языки определяют свой входной файл в терминах строк ввода, где каждая строка ввода представляет собой последовательность символов, оканчивающихся переводом каретки.Если их грамматика определена таким образом, то последняя действительная строка файла также должна заканчиваться возвратом каретки.

1 голос
/ 11 октября 2018

Это из-за определения, что такое текстовый файл. Когда вы создаете новый текстовый файл в любой среде Unix, содержимое этого файла представляет собой символ новой строки '\ n'

Без этого файл на самом деле не идентифицируется как текстовый файл. Теперь, когда мы добавим код в этот текстовый файл, мы не будем удалять эту начальную новую строку, которая определяет сам текстовый файл .

...