Що таке повернення каретки, подача в лінійку та подача форми?


500

Яке значення мають наступні контрольні символи:

  1. Повернення вагона

  2. Лінійний канал

  3. Форма подачі


14
Що означає "повернення вагона"? Я не бачу жодного "перевезення", яке "повертається" на своєму ноутбуці. : s
Жан Хомінал

12
@JeanHominal перевезення в основному означає курсор (або вказівник у древніх машинках), а return означає повернутися до початку цього рядка.
SOFe

Я не бачу припинених жодних проводів (або будь-яких скляних стекол) у своєму "віконному" вікні ", а також немає" телетайпу ", прикріпленого до / dev / tty1. Всі вони стали метафорами.
Пісквор вийшов з будівлі

Відповіді:


621

Повернення каретки означає повернутися до початку поточної лінії без просування вниз. Назва походить від каретки принтера, оскільки монітори були рідкістю, коли ім'я було придумано. Зазвичай це уникає як \r, скорочено CR , і має значення ASCII 13або 0x0D.

Linefeed означає просування вниз до наступного рядка; проте він був перероблений та перейменований. Використовується як "новий рядок", він закінчує лінії (зазвичай їх плутають з роздільними лініями). Це зазвичай уникає як \n, скорочено LF або NL, і має значення ASCII 10або 0x0A. Для пари використовується CRLF (але не CRNL) \r\n.

Подача форми означає перехід до наступної "сторінки". Він зазвичай використовувався як роздільники сторінок, але зараз також використовується як роздільник розділів. (Нечасто використовується у вихідному коді для поділу логічно незалежних функцій або груп функцій.) Текстові редактори можуть використовувати цей символ, коли ви "вставляєте розрив сторінки". Зазвичай це уникає як \f, скорочено FF , і має значення ASCII 12або 0x0C.


Як контрольні символи їх можна інтерпретувати по-різному.

Найпоширеніша відмінність (і, мабуть, єдина, про яку варто турбуватися) - це рядки, що закінчуються на CRLF у Windows, NL на Unix-подібних і CR на старих Macs (ситуація змінилася з OS X, щоб бути схожою на Unix). Зауважимо, що зміст значення від LF до NL для точно такого ж символу дає відмінності між Windows та Unix. (Windows, звичайно, новіше, ніж Unix, тому він не сприйняв цей смисловий зсув. Я не знаю історії Macs за допомогою CR.) Багато текстових редакторів можуть читати файли в будь-якому з цих трьох форматів і конвертувати між ними , але не всі комунальні послуги можуть.

Подача форми трохи цікавіша (хоча і менш часто використовується безпосередньо), і при звичайному визначенні роздільника сторінок вона може надходити лише між рядками (наприклад, після послідовності нового рядка NL, CRLF або CR) або на початку або кінець файлу.


10
Я можу підтвердити, що OS X використовує NL як термінатор лінії, як і Unix (тому що OS X - це Unix). CR використовувались у Mac OS 9 та нижче.
Rory O'Kane

1
Діаграма FF може здатися дивною сьогодні (поряд із дзвіночкою "CTRL-G"), але вона мала більше актуальності, коли відеодисплеї були набагато рідшими, а термінали копії використовувались як відображення даних.
Рік Сарвас

Це не контроль над подачею \x0c?
Tjorriemorrie

2
"Я не знаю історії Маків, що використовують CR." Це, ймовірно, надійшло від Apple II з використанням CR. CR був поширений і в інших 8-бітових системах, як Commodore і Tandy. ASCII не був універсальним для цих систем: Commodore використовував PETSCII, який мав LF у 0x8d (!). Атарі взагалі не мав характеру НЧ. З будь-якої причини CR = 0x0d був більш-менш стандартним.
Ssswift

125

\r це повернення каретки і переміщує курсор назад, як якщо б я це зробив-

printf("stackoverflow\rnine")
ninekoverflow

означає, що він перемістив курсор на початок "stackoverflow" і перезаписав початкові чотири символи, оскільки "дев'ять" має чотири символи.

\n - це новий рядовий символ, який змінює рядок і переводить курсор на початок нового рядка, наприклад-

printf("stackoverflow\nnine")
stackoverflow
nine

\f це корм форми, його використання стало застарілим, але воно використовується для надання подібних відступів

printf("stackoverflow\fnine")
stackoverflow
             nine

якщо я напишу як-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great

3
Але цей приклад не працює на мовах високого рівня!
Сина Карванді

@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Я це робить: ви можете принаймні зробити те ж саме в оболонці Linux, використовуючи printfутиліту coreutils. Або навіть з використанням echo -enякого є вбудований баш.
Руслан

Як передавати всі рядки як один єдиний рядок у файлі?
Paras Singh

8
Подача форми не використовується для відступу. Якщо ви надішліте кілька таких на принтер, він виплюне папір. Те, що ви описали як \fнасправді \v- вертикальна вкладка, надана обом на консолі однаково.
cprn

printf("123\f456\f789");показує /> <bold> 123456789 </bold> на консолі.
Mayur

31

Погляньте на Вікіпедію :

Системи, засновані на ASCII або сумісному наборі символів, використовують або LF (канальний рядок, '\ n', 0x0A, 10 у десятковій частині), або CR (повернення каретки, '\ r', 0x0D, 13 у десятковій частині) окремо, або CR з наступним LF (CR + LF, 0x0D 0x0A). Ці символи ґрунтуються на командах принтера: Подача рядків вказувала, що один лист паперу повинен надходити з принтера, а повернення каретки вказувало, що каретка принтера повинна повернутися до початку поточного рядка.


25

\fвикористовується для розриву сторінки. Ви не бачите жодного ефекту в консолі. Але коли ви використовуєте цю константу символів у вашому файлі, ви можете побачити різницю.

Інший приклад - якщо ви можете перенаправити результат на файл, тоді вам не доведеться писати файл або використовувати обробку файлів.

Наприклад:

Напишіть цей код в c ++

void main()    
{
    clrscr();
    cout<<"helloooooo" ;

    cout<<"\f";
    cout<<"hiiiii" ;

}

і коли ви компілюєте це, він генерує exe (наприклад, abc.exe)

тоді ви можете перенаправити свій вихід на файл, використовуючи це:

abc > xyz.doc

тоді відкрийте файл, xyz.docви побачите фактичну перерву сторінки між hellooo та hiiii ....


21

Крім вищенаведеної інформації, є ще цікава історія LF (\ n) та CR (\ r). [Оригінальний автор: 阮一峰 Джерело: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Перш ніж вийшов комп'ютер, був тип телепринтеру під назвою Teletype Model 33. Він може друкувати 10 символів кожен другий. Але в цьому є одна проблема, після закінчення друку кожного рядка знадобиться 0,2 секунди для переходу до наступного рядка, це час друку 2 символів. Якщо протягом 0,2 секунди буде передано новий символ, то цей новий символ буде втрачено.

Отже, вчені знайшли спосіб вирішити цю проблему, вони додають два символи, що закінчуються після кожного рядка, один - «Повернення каретки», що означає, щоб принтер привів друкуючу голівку ліворуч; інший - "Подача рядків", він повідомляє принтеру перемістити папір на 1 рядок.

Пізніше комп'ютер став популярним, ці два поняття використовуються на комп’ютерах. У той час запам'ятовуючий пристрій був дуже дорогим, тому деякі вчені сказали, що додати два символи в кінці кожного рядка досить дорого, одного достатньо, тому є деякі аргументи, яким саме користуватися.

У UNIX / Mac та Linux '\ n' ставиться в кінці кожного рядка, у Windows, '\ r \ n' ставиться в кінці кожного рядка. Наслідком цього використання є те, що файли в UNIX / Mac будуть відображатися в одному рядку, якщо їх відкрити в Windows. Хоча файл у Windows матиме один ^ M в кінці кожного рядка, якщо він відкриється в UNIX або Mac.


1
З випуском OSX (на основі unix BSD) Mac перейшов на '\ n' - закінчення рядків Unix.
Джонатан Крос

"Файли в UNIX / Mac будуть відображатися в одному рядку, якщо їх відкрити в Windows." WRITE.EXE(він же Wordpad) може відображати їх просто чудово.
thecarpy

18

На старих терміналах принтера для паперу перехід до наступного рядка передбачав дві дії: переміщення друкуючої головки назад до початку горизонтального діапазону сканування (повернення каретки) та переміщення рулону паперу, на який друкується (подача рядка).

Оскільки ми більше не використовуємо термінали паперового принтера, ці дії вже не є актуальними, але символи, які використовуються для їх сигналу, застрягли в різних втіленнях.


Насправді "повернення каретки" не переміщує друкуючу голівку вліво, але переміщує каретку, яка тримає валик праворуч. Раніше був довгий важіль, який приводився в рух лівою рукою для цього. Дивіться en.wikipedia.org/wiki/Typewriter
Марк Лаката

2
@MarkLakata Вірно для друкарських машинок, але ця відповідь стосується старих терміналів друку. Наприклад, DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Пітер Кардона

12

Розглянемо ударний принтер IBM 1403. CR перемістила друкувальну головку до початку рядка, але НЕ пересунула папір. Це дозволило "перевидрукувати", розмістивши кілька рядків виводу на одному рядку. Такі речі, як підкреслення, були досягнуті таким чином, як і СУЖИЙ друк. LF просунув папір на один рядок. Якщо CR не було, наступний рядок надрукував би як поетапний крок, оскільки LF не перемістила головку друку. FF перемістив папір на наступну сторінку. Зазвичай він також переміщав друкуючу головку до початку першого рядка на новій сторінці, але для цього вам може знадобитися CR. Зрозуміло, більшість програмістів кодують CRFF замість CRLF в кінці останнього рядка сторінки, оскільки додатковий CR, створений FF, не має значення.


Це єдина відповідь, яка пояснює повний сенс повернення вагона.
Лі

12

Коротко :

Carriage_return ( \rабо 0xD): взяти контроль над початком тієї ж лінії .

Line_Feed ( \nабо 0xA): Для того, щоб взяти під контроль при запуску з наступного рядка .

form_feed ( \fабо 0xC): Для того, щоб взяти під контроль при запуску з наступної сторінки .


2
Таку відповідь слід заохочувати.
користувач5280911

10

Як доповнення,

1, Повернення каретки : це термінологія принтера, що означає зміну місця друку на початок поточного рядка. У комп'ютерному світі це означає повернення до початку поточного рядка в більшості випадків, але нове значення має рідкість.

2, Потік рядків : це термінологія принтера, що означає просування паперу на один рядок. Таким чином, повернення каретки та канал каналів використовуються разом, щоб почати друкувати на початку нового рядка. У комп'ютерному світі він, як правило, має те саме значення, що й новий рядок.

3, Feed форми : Це термінологія принтера, мені подобається пояснення в цій темі .

Якщо ви програмували принтер у 1980-х роках, він видалить папір та запустить нову сторінку. Ви практично впевнені, що ніколи цього не потребуєте.

http://en.wikipedia.org/wiki/Form_feed

Він майже застарілий, і ви можете звернутися до послідовності Escape \ f - feed feed - що це саме? для детального пояснення.

Зауважте, що ми можемо використовувати CR або LF або CRLF, щоб відстояти новий рядок на деяких платформах, але новий рядок не може стояти за ними на деяких інших платформах. Для детальної інформації зверніться до вікі Newline .

LF: Multics, Unix та Unix-подібні системи (Linux, OS X, FreeBSD, AIX, Xenix тощо), BeOS, Amiga, RISC OS та інші

CR: 8-бітні машини Commodore, Acorn BBC, ZX Spectrum, TRS-80, сімейство Apple II, Oberon, класичний Mac OS до версії 9, MIT Lisp Machine та OS-9

RS: реалізація QNX до POSIX

0x9B: 8-бітні машини Atari, що використовують варіант ATASCII ASCII (155 у десятковій частині)

CR + LF: Microsoft Windows, DOS (MS-DOS, ПК DOS тощо), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC та більшість інших ранніх не-Unix та не-IBM OS

LF + CR: текст Acorn BBC та RISC OS намотують текст.


3

"\ n" - символ передачі рядків. Це означає закінчити нинішній рядок і перейти до нового рядка для кожного, хто його читає.


3

Повернення каретки та подача рядків - це також посилання на друкарські машинки, оскільки з невеликим натисканням на ручку з лівої сторони коляски (місце, куди йде папір) папір обертається невеликою кількістю навколо циліндра, просуваючи документуйте один рядок. Якщо ви закінчили вводити один рядок і хочете продовжувати рух до наступного, ви натискали сильніше, як просуваючи лінію, так і ковзаючи вагонкою вправо, а потім продовжували вводити ліворуч праворуч, коли вагон рухався кожним натисканням клавіші . Потрібно говорити, що обробка тексту за словом була типовою настройкою для всієї обробки текстів епохи. П: Д


2

Це недрукарські символи, що стосуються поняття "новий рядок". \ n - це прямий канал. \ r - повернення вагона. На різних платформах вони мають різний зміст відносно дійсного нового рядка. У Windows новий рядок - \ r \ n. У Linux, \ n У mac, \ r.

На практиці ви вводите їх у будь-який рядок, і це матиме вплив на друк рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.