Co to jest powrót karetki, wysuw wiersza i wysuw formularza?

500

Co oznaczają następujące znaki kontrolne:

  1. Zwrot karetki

  2. Linia przesuwania

  3. Form feed

Ashna
źródło
14
Co oznacza „zwrot karetki”? Na moim laptopie nie widzę żadnych „powozów”. : s
Jean Hominal
12
@JeanHominal karetka zasadniczo oznacza kursor (lub wskaźnik w starożytnych maszynach do pisania), a powrót oznacza powrót do początku tej linii.
SOFe,
Nie widzę żadnych zakończonych przewodów (ani żadnych tafli szkła w tym przypadku) w moim „terminalu” „oknie”, ani też „teletype” dołączony do / dev / tty1. Wszystkie stały się metaforami.
Piskvor opuścił budynek

Odpowiedzi:

621

Powrót karetki oznacza powrót na początek bieżącej linii bez przechodzenia w dół. Nazwa pochodzi od karetki drukarki, ponieważ monitory były rzadkie, gdy nazwa została wymyślona. Zwykle jest to oznaczane jako CR , w \rskrócie , i ma wartość ASCII lub .130x0D

Linefeed oznacza przejście w dół do następnej linii; jednak zmieniono jego przeznaczenie i zmieniono jego nazwę. Używany jako „nowa linia”, kończy linie (zwykle mylone z liniami oddzielającymi ). Zwykle jest to znak ucieczki \n, w skrócie LF lub NL, i ma wartość ASCII 10lub 0x0A. CRLF (ale nie CRNL) jest używany dla pary \r\n.

Form feed oznacza przejście w dół do następnej „strony”. Był powszechnie używany jako separatory stron, ale teraz jest również używany jako separatory sekcji. (Jest to rzadko używane w kodzie źródłowym do dzielenia logicznie niezależnych funkcji lub grup funkcji.) Edytory tekstu mogą używać tego znaku po „wstawieniu podziału strony”. Zwykle jest to \foznaczone jako FF , i ma wartość ASCII 12lub 0x0C.


Jako znaki kontrolne mogą być interpretowane na różne sposoby.

Najczęstszą różnicą (i prawdopodobnie jedyną, o którą warto się martwić) są linie kończące się CRLF na Windowsie, NL na Unix-like i CR na starszych Macach (sytuacja zmieniła się w OS X, by być jak Unix). Zwróć uwagę na przesunięcie znaczenia z LF na NL, dla dokładnie tego samego znaku, daje różnice między Windows i Unix. (Windows jest oczywiście nowszy niż Unix, więc nie przyjął tej zmiany semantycznej. Nie znam historii komputerów Mac z CR). Wiele edytorów tekstu może odczytywać pliki w dowolnym z tych trzech formatów i konwertować je między nimi , ale nie wszystkie narzędzia mogą.

Przesuw strony jest nieco bardziej interesujący (choć rzadziej używany bezpośrednio), a przy zwykłej definicji separatora strony może znajdować się tylko między wierszami (np. Po sekwencji nowej linii NL, CRLF lub CR) lub na początku lub koniec pliku.

Roberto Caboni
źródło
10
Mogę potwierdzić, że OS X używa NL jako terminatora linii, podobnie jak Unix (ponieważ OS X to Unix). CR został użyty w Mac OS 9 i niższych wersjach.
Rory O'Kane,
1
Znak FF może dziś wydawać się dziwny (wraz z dzwonkowym znakiem „CTRL-G”), ale miał on większe znaczenie w przeszłości, gdy wyświetlacze wideo były znacznie mniej powszechne, a terminale drukowane były używane jako wyświetlacze danych.
Rick Sarvas,
Czy to nie kontrola pasz \x0c?
Tjorriemorrie,
2
„Nie znam historii komputerów Mac korzystających z CR”. To prawdopodobnie pochodzi z Apple II przy użyciu CR. CR był również powszechny w innych systemach 8-bitowych, takich jak Commodore i Tandy. ASCII nie był uniwersalny w tych systemach: Commodore używał PETSCII, który miał LF na 0x8d (!). Atari nie miał wcale charakteru LF. Z jakiegokolwiek powodu CR = 0x0d był mniej więcej standardem.
Ssswift
125

\r to powrót karetki i przesuwa kursor do tyłu, jakbym to zrobił-

printf("stackoverflow\rnine")
ninekoverflow

oznacza, że ​​przesunął kursor na początek „przepływu stosu” i nadpisuje początkowe cztery znaki, ponieważ „dziewięć” ma cztery znaki.

\n to znak nowej linii, który zmienia linię i przenosi kursor na początek nowej linii, np.

printf("stackoverflow\nnine")
stackoverflow
nine

\f jest form feed, jego użycie stało się przestarzałe, ale służy do nadawania wcięcia podobnego

printf("stackoverflow\fnine")
stackoverflow
             nine

jeśli napiszę jak

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great
użytkownik3346547
źródło
3
Ale ten przykład nie działa w językach wysokiego poziomu!
Sina Karvandi
@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ I robi: możesz przynajmniej zrobić to samo w powłoce Linuksa, używając printfnarzędzia z coreutils. Lub nawet używanie, echo -enktóre jest wbudowane w bash.
Ruslan
Jak przekazać wszystkie linie jako jedną linię w pliku?
Paras Singh
8
Wysuw strony nie jest używany do wcięcia. Jeśli wyślesz kilka z nich do drukarki, wypluje papier. To, co opisałeś, \fto tak naprawdę \v- pionowa zakładka, o ile obie wyglądają tak samo w konsoli.
cprn
printf("123\f456\f789");pokazuje /> <bold> 123456789 </bold> na konsoli.
Mayur
31

Zobacz Wikipedię :

Systemy oparte na ASCII lub zgodnym zestawie znaków używają LF (przesunięcie wiersza, „\ n”, 0x0A, 10 w systemie dziesiętnym) lub CR (powrót karetki, „\ r”, 0x0D, 13 w systemie dziesiętnym) indywidualnie lub CR, po którym następuje LF (CR + LF, 0x0D 0x0A). Znaki te są oparte na poleceniach drukarki: Przesunięcie linii wskazuje, że jeden wiersz papieru powinien wysunąć się z drukarki, a znak powrotu karetki wskazuje, że karetka drukarki powinna powrócić na początek bieżącego wiersza.

tanascius
źródło
25

\fsłuży do podziału strony. W konsoli nie widać żadnego efektu. Ale kiedy użyjesz tej stałej znaku w swoim pliku, zobaczysz różnicę.

Innym przykładem jest to, że jeśli możesz przekierować dane wyjściowe do pliku, nie musisz pisać pliku ani korzystać z obsługi plików.

Na przykład:

Napisz ten kod w c ++

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

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

}

a kiedy to skompilujesz, wygeneruje exe (np. abc.exe)

następnie możesz przekierować dane wyjściowe do pliku za pomocą tego:

abc > xyz.doc

następnie otwórz plik xyz.doc, aby zobaczyć rzeczywisty podział strony między hellooo a hiiii ....

Balram Dixit
źródło
21

Oprócz powyższych informacji, nadal istnieje ciekawa historia LF (\ n) i CR (\ r). [Oryginalny autor: 阮一峰 Źródło: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Zanim pojawił się komputer, istniał rodzaj teleprintera o nazwie Teletype Model 33. Każdy może wydrukować 10 znaków druga. Ale jest z tym jeden problem, po zakończeniu drukowania każdej linii przejście do następnej linii zajmie 0,2 sekundy, czyli czas drukowania 2 znaków. Jeśli nowe znaki zostaną przeniesione w ciągu 0,2 sekundy, nowa postać zostanie utracona.

Tak więc naukowcy znaleźli sposób na rozwiązanie tego problemu, dodając po każdej linii dwa znaki końcowe, jeden to „powrót karetki”, który ma nakazać drukarce przesunięcie głowicy drukującej w lewo .; drugi to „Przesuw wiersza”, mówi drukarce, aby przesunął papier o 1 linię w górę.

Później komputer stał się popularny, te dwa pojęcia są używane na komputerach. W tym czasie urządzenie pamięci masowej było bardzo drogie, więc niektórzy naukowcy powiedzieli, że dodanie dwóch znaków na końcu każdego wiersza było drogie, wystarczy jeden, więc istnieją pewne argumenty na temat tego, którego użyć.

W systemach UNIX / Mac i Linux „\ n” jest umieszczany na końcu każdej linii, w systemie Windows „\ r \ n” jest umieszczany na końcu każdej linii. Konsekwencją tego użycia jest to, że pliki w systemie UNIX / Mac będą wyświetlane w jednym wierszu, jeśli zostaną otwarte w systemie Windows. Podczas gdy plik w systemie Windows będzie miał jeden ^ M na końcu każdej linii, jeśli zostanie otwarty w systemie UNIX lub Mac.

wxie
źródło
1
Wraz z wydaniem OSX (opartego na unixie BSD) komputer Mac przełączył się na „\ n” - zakończenia linii uniksowych.
Jonathan Cross
„Pliki w systemie UNIX / Mac będą wyświetlane w jednym wierszu, jeśli zostaną otwarte w systemie Windows.” WRITE.EXE(aka Wordpad) może wyświetlać je w porządku.
thecarpy
18

Na starych terminalach drukarka papieru przejście do następnej linii wymagało dwóch działań: przesunięcie głowicy drukującej z powrotem na początek poziomego zakresu skanowania (powrót karetki) i przesunięcie rolki papieru, na której drukowane jest (podawanie linii).

Ponieważ nie używamy już terminali do drukarek papierowych, działania te nie są już tak naprawdę istotne, ale postacie używane do sygnalizowania ich utknęły w różnych wcieleniach.

Bursztyn
źródło
W rzeczywistości „powrót karetki” nie przesuwa głowicy drukującej w lewo, ale przesuwa karetkę, która utrzymuje płytę dociskową w prawo. W tym celu lewą ręką uruchamiano długą dźwignię. Zobacz en.wikipedia.org/wiki/Typewriter
Mark Lakata,
2
@MarkLakata Prawda dla maszyn do pisania, ale ta odpowiedź dotyczy starych terminali drukujących. Na przykład DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona,
12

Zastanów się nad drukarką udarową IBM 1403. CR przesunął głowicę drukującą na początek linii, ale NIE przesunął papieru. Pozwoliło to na „nadruk”, umieszczenie wielu wierszy wydruku w jednym wierszu. W ten sposób osiągnięto takie rzeczy, jak podkreślanie, podobnie jak druk BOLD. LF przesunął papier o jedną linię. Gdyby nie było CR, następny wiersz zostałby wydrukowany jako krok naprzemienny, ponieważ LF nie przesunął głowicy drukującej. FF przesunął papier na następną stronę. Zazwyczaj przenosi to także głowicę drukującą na początek pierwszego wiersza na nowej stronie, ale może być do tego potrzebny CR. Oczywiście większość programistów kodowała CRFF zamiast CRLF na końcu ostatniego wiersza na stronie, ponieważ dodatkowy CR stworzony przez FF nie miałby znaczenia.

Dick Guertin
źródło
To jedyna odpowiedź, która wyjaśnia pełne znaczenie zwrotu karetki.
Lee
12

W skrócie :

Carriage_return ( \rlub 0xD): Aby przejąć kontrolę na początku tej samej linii .

Line_Feed ( \nlub 0xA): przejąć kontrolę na począwszy od następnego wiersza .

form_feed ( \flub 0xC): Aby przejąć kontrolę na począwszy od następnej strony .

Ritik Kamboj
źródło
2
Należy zachęcać do tak zwięzłej odpowiedzi.
user5280911
10

Jako dodatek

1, Zwrot karetki : Jest to terminologia drukarki oznaczająca zmianę lokalizacji wydruku na początek bieżącej linii. W świecie komputerów oznacza to w większości przypadków powrót do początku bieżącej linii, ale rzadko oznacza nową linię.

2, Podawanie wiersza : jest to terminologia drukarki oznaczająca przesunięcie papieru o jedną linię. Tak więc powrót karetki i przesunięcie wiersza są używane razem, aby rozpocząć drukowanie na początku nowej linii. W świecie komputerów ma to na ogół takie samo znaczenie jak nowa linia.

3, Form feed : To terminologia drukarki, podoba mi się wyjaśnienie tego wątku .

Jeśli programowałeś dla drukarki w stylu lat 80., wysunąłby papier i rozpoczął nową stronę. Jesteś praktycznie pewien, że nigdy go nie potrzebujesz.

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

Jest prawie przestarzały i można odnieść się do sekwencji ucieczki \ f - form feed - co to właściwie jest? po szczegółowe wyjaśnienia.

Uwaga: możemy użyć CR, LF lub CRLF, aby zastąpić linię nowej linii na niektórych platformach, ale linii nowej nie można znieść przy niektórych platformach. Szczegółowe informacje można znaleźć na wiki Newline .

LF: Multics, Unix i systemy uniksopodobne (Linux, OS X, FreeBSD, AIX, Xenix itp.), BeOS, Amiga, RISC OS i inne

CR: 8-bitowe maszyny Commodore, Acorn BBC, ZX Spectrum, TRS-80, rodzina Apple II, Oberon, klasyczny Mac OS do wersji 9, MIT Lisp Machine i OS-9

RS: Implementacja QNX przed POSIX

0x9B: Maszyny 8-bitowe Atari używające wariantu ASCII ATASCII (155 w systemie dziesiętnym)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS itp.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC i większość innych wczesnych systemów operacyjnych innych niż Unix i innych niż IBM

LF + CR: buforowane wyjście Acorn BBC i RISC OS.

Eugene
źródło
3

„\ n” jest znakiem końca linii. Oznacza to zakończenie obecnej linii i przejście do nowej linii dla każdego, kto ją czyta.

vpit3833
źródło
3

Zwrot karetki i przesunięcie wiersza są również odniesieniami do maszyn do pisania, ponieważ po lekkim naciśnięciu rączki po lewej stronie karetki (miejsce, w którym idzie papier) papier obracałby się nieznacznie wokół cylindra, przesuwając udokumentuj jedną linię. Jeśli skończyłeś pisać jedną linię i chciałeś przejść do następnej, naciskałeś mocniej, zarówno przesuwając linię, jak i przesuwając karetkę do końca w prawo, a następnie wznawiając pisanie od lewej do prawej, gdy karetka poruszała się za każdym naciśnięciem klawisza . Nie trzeba dodawać, że zawijanie słów było domyślnym ustawieniem dla wszystkich edytorów tekstu w tamtych czasach. P: D

TheLastWordSword
źródło
2

Są to znaki niedrukowalne, odnoszące się do pojęcia „nowej linii”. \ n jest zasilaniem liniowym. Zwrot karetki. Na różnych platformach mają różne znaczenia w stosunku do ważnej nowej linii. W systemie Windows nowa linia to \ r \ n. W systemie Linux \ n. W Mac'u.

W praktyce wstawiasz je w dowolny ciąg, co będzie miało wpływ na wydruk tego ciągu.

Palantir
źródło