Длина строки
- 1 year ago
- 0
- 0
Перевод строки или разрыв строки — продолжение печати текста с новой строки, то есть с левого края на строке ниже. Перевод строки выполняется также перед следующим абзацем или страницей. На компьютерах перевод строки осуществляется нажатием на клавишу ввода Enter .
Разделителем строк
, обозначающим место перевода строки, в
текстовых данных
служит один или два
управляющих символа
(
\n
в
Unix
и
Unix-подобных операционных системах
,
\r
в
MacOS
,
\r\n
в
Windows
), а в
размеченном
тексте — определённый
тег
(например в
HTML
— тег
<br>
, от
англ.
break
— «разрыв»).
Перевод строки сокращают как NEL (от англ. next line — «со следующей строки, переход на следующую строку», или newline — «с новой строки, переход на новую строку»).
Возврат каретки ( англ. carriage return , CR ) — управляющий символ ASCII ( 0x 0D , 13 10 , '\r'), при выводе которого курсор перемещается к левому краю поля. Этот управляющий символ вводится клавишей «Enter» . Будучи записан в файле , в отдельности рассматривается как перевод строки только в системах Macintosh .
Подача на строку
или
Перевод на строку
(от
англ.
line feed
,
LF
— «подача [бумаги] на строку») — управляющий символ ASCII (
0x
0A
, 10 в десятичной системе счисления, '\n'), при выводе которого курсор перемещается на следующую строку. В случае
принтера
это означает сдвиг бумаги вверх, в случае
дисплея
— сдвиг курсора вниз, если ещё осталось место, и прокрутку текста вверх, если курсор находился на нижней строке. Возвращается ли при этом курсор к левому краю или нет, зависит от реализации.
Таким образом, вывод последовательности CR + LF в семантике терминала гарантирует действие «создание новой строки».
Терминалы (и их эмуляторы ) могут также проводить различные преобразования символов (например, LF → CR + LF , CR → CR + LF ) при вводе и выводе текста.
Жёсткий возврат , иногда аппаратный возврат — разделитель строк, поставленный пользователем. В машинном представлении текста жёсткий возврат явно выражен, обычно управляющими символами или тегом .
Мягкий возврат — перевод строки, выполненный текстовым процессором в том месте текста, которое им выбрано. Мягкий возврат разделяет строки текста в его визуальном (видимом пользователем) представлении, но может быть никак не выражен в машинном представлении этого текста.
Системы, основанные на
ASCII
или совместимом наборе символов, используют или
LF
(перевод строки,
0x
0A
), или
CR
(возврат каретки,
0x
0D
) по отдельности, или последовательность
CR
+
LF
; см. ниже историческую причину для соглашения
CR
+
LF
. Эти названия основаны на командах принтера:
перевод строки
прокручивает барабан на одну строку, а
возврат каретки
означает, что каретка печатающего устройства должна вернуться к началу текущей строки.
0x
0A
) используется в
Multics
,
UNIX
,
UNIX-подобных операционных системах
(
GNU
/
Linux
,
AIX
,
Xenix
,
Mac OS X
,
FreeBSD
и др.),
BeOS
,
Amiga UNIX
,
RISC OS
и других;
0x
0D
) используется в 8-битовых машинах
Commodore
, машинах
TRS-80
,
Apple II
, системах
Mac OS
до
версии 9
и
OS-9
;
0x
0D
0x
0A
) используется в
DEC
RT-11
и большинстве других ранних не-UNIX- и не-
IBM
-систем, а также в
CP/M
,
,
MS-DOS
,
OS/2
,
Microsoft Windows
,
Symbian OS
, протоколах
Интернет
.
По стандарту любое совместимое с Юникодом приложение должно воспринимать как перевод строки каждый из следующих символов:
Последовательность CR + LF ( U+000D U+000A ) следует воспринимать как один перевод строки, а не два .
Нет общепринятых сокращений русских терминов. ВК ( В озврат к аретки) совпадает по написанию с сокращением от англ. BreaK («разрыв [строки]», — то же, что перевод строки), а ПС не различает П одачу с троки и П еревод с троки.
Отсутствие единого общепринятого представления перевода строки в разных операционных системах осложняет обмен текстовыми данными между ними. Юникод старается примирить эту разницу, уравнивая CR , LF и CR + LF , однако вступает в противоречие с наследуемым им ASCII при трактовке последовательности LF + CR , не предварённой CR : согласно ASCII это один перевод строки, а согласно Юникоду — два.
Перевод строки при вводе с клавиатуры представлен единообразно во всех системах — символом CR , и в системах с другим представлением перевода строки текстовые данные приходится перекодировать в необходимый формат.
На перфокартных системах хранения данных одна строка записывалась на одну перфокарту, поэтому строка была заданной длины, по количеству колонок (обычно 80). Строки короче добивались пробелами, а строки длиннее обрезались. Разделителя строк не было, а неявный перевод строки предполагался через каждые 80 символов. Некоторые ранние мейнфреймовые операционные системы переняли это для хранения текста в файлах, где уже не было естественного ограничения на длину строки.
На механических пишущих машинках был рычаг, который возвращал каретку к левому краю страницы и прокручивал вал, подвигая бумагу вверх на строку. На телетайпах и более поздних алфавитно-цифровых печатающих устройствах (АЦПУ) вместо каретки была головка, в лазерных принтерах она перестала быть материальной, но в термине возврат каретки всё это продолжали называть кареткой, чтобы его не менять. На телетайпах возврат каретки и подачу строки разделили, откуда традиция представления перевода строки как CR + LF перешла и к текстовым файлам.
Телетайпы сначала печатали на рулонной бумаге, и сообщения начинали и заканчивали переводом строки, чтобы каждое начиналось с новой строки наверняка. Отсюда пошёл обычай включать разделитель сообщений в состав самого сообщения.
На компьютерах появился диалоговый режим работы, когда поочерёдно печатались вводимые управляющие сообщения пользователя и ответные программные сообщения. Пользователь после сообщения всегда переводил строку, так как одновременно это означало команду к исполнению, а вот программы после своего сообщения строку иногда не переводили, несмотря на предписание. Устройство вывода изначально не было приспособлено к тому, чтобы терминал мог следить за переводами строк, и реализовать это было трудно, поэтому чтобы ввод пользователя начинался с новой строки наверняка, управляющий диалогом терминал после программного сообщения переводил строку тоже. Помещать перевод строки предписывалось и в конце текстового файла.
Забота о разделении сообщений легла на терминал, и думать об этом перестали, а перевод строки в конце текста переосмыслился как конец последней строки, вместе с чем как концы строк переосмыслились и вообще все переводы строк, чему способствовало удобство работы с регулярно завершёнными строками с точки зрения программирования, сродни нуль-терминированным строкам . Так обычай включать разделитель сообщений в состав сообщения перешёл в обычай включать разделитель строк в состав строки.
Лишняя строка в конце файла обычно не представляет хлопот, поэтому перевод строки до сих пор называют концом строки, а разделитель строк — символом конца строки (EOL, англ. end of line ).
Перетекание разделителя в завершитель и обратно бывает не только у перевода строки. Так, точка с запятой в языке Си команды завершает, а в Паскале — их разделяет. В письменной речи после нескольких предложений точку почти всегда ставят, а после одиночного — чаще нет. Это колебание хорошо видно в списках , где одиночные предложения иногда начинают с большой буквы, а иногда — с маленькой.
На телетайпах, а потом и в первых редакторах разделение текста на абзацы не имело своего особого представления, для этого использовали пустые строки или отступ из нескольких пробелов, а переводы строки внутри абзаца проставляли вручную.
Позже в редакторах появился автоматический перенос, выполняемый на лету при отрисовке текста каждый раз заново. Для отличения от ручного его назвали мягким возвратом, а ручной — жёстким (перенос называли и просто возвратом, см. раздел ). Разделитель строк при этом переносил как раньше, но приобрёл смысл ещё и разделителя абзацев — для тех строк, в которых срабатывал автоперенос и которые становились при этом абзацами. Включатель такого режима назвали переносом по словам ( англ. word wrap ). При автопереносе ручной перенос разрывал абзац, межабзацный интервал делался как раньше (в новых терминах — перемежением пустым абзацем), но основное качество абзаца — независимость от разбиения на строки — было достигнуто.
Режим автопереноса включался и выключался пользователем вручную, определить это программно было трудно, то есть, избавившись от ручного переноса, получили другую ручную операцию. Стало понятно, что не обойтись без более автоматизирующего разнесения разделителя строк и разделителя абзацев, то есть для них понадобились два разных символа.
Чтобы не заботиться о совместимости с уже существующим в ASCII разделителем строк/абзацев, разработчики не стали использовать символы ASCII для разделителя строк и разделителя абзацев. В HTML использовали теги <br /> и <p> , в Юникоде — символы U+2028 и U+2029 , соответственно. В Википедии абзацы можно разделять пустыми строками, отображаемыми при этом полноценным интервалом.