Satır başı, satır besleme ve form besleme nedir?


500

Aşağıdaki kontrol karakterlerinin anlamı nedir:

  1. Satırbaşı

  2. Satır besleme

  3. Form besleme


14
"Taşıma dönüşü" ne demektir? Dizüstü bilgisayarımda dönen bir "taşıma" görmüyorum. : s
Jean Hominal

12
@JeanHominal, temel olarak imleç (veya eski daktilolardaki işaretçi) anlamına gelir ve geri dönüş, bu satırın başına dönmek için anlamına gelir.
SOFe

"Terminal" "penceremde" (veya bu konu için herhangi bir cam bölme) sonlandırılmış kablolar görmüyorum veya / dev / tty1'e bağlı bir "teletype" yok. Hepsi mecaz oldular.
Piskvor

Yanıtlar:


621

Taşıyıcı dönüşü , aşağı doğru ilerlemeden geçerli satırın başına dönmek anlamına gelir. Ad üretildiğinde monitörler nadir olduğu için bu ad yazıcının taşıyıcısından gelir. Bu genellikle \rkısaltılmış CR olarak kaçar ve ASCII değerine sahiptir 13veya 0x0D.

Satır besleme , bir sonraki satıra aşağı doğru ilerlemek anlamına gelir; ancak, yeniden tasarlandı ve yeniden adlandırıldı. "Yeni satır" olarak kullanıldığında, satırları sonlandırır (genellikle ayırma satırlarıyla karıştırılır ). Bu genellikle LF veya NL olarak \nkısaltılır ve ASCII değeri veya olur . Çift için CRLF (ancak CRNL değil) kullanılır .100x0A\r\n

Form besleme , bir sonraki "sayfaya" ilerlemek anlamına gelir. Genellikle sayfa ayırıcılar olarak kullanılır, ancak şimdi bölüm ayırıcılar olarak da kullanılır. (Kaynak kodda, mantıksal olarak bağımsız işlevleri veya işlev gruplarını bölmek için nadiren kullanılır.) Metin düzenleyicileri, "sayfa sonu eklediğinizde" bu karakteri kullanabilir. Bu genellikle FF olarak \fkısaltılır ve ASCII değerine sahiptir veya .120x0C


Kontrol karakterleri olarak çeşitli şekillerde yorumlanabilirler.

En yaygın fark (ve muhtemelen endişelenmeye değer olan tek şey), Windows'ta CRLF, Unix benzeri NL'de ve eski Mac'lerde CR ile biten durumdur (durum, OS X ile Unix gibi olacak şekilde değişmiştir). Tam olarak aynı karakter için LF'den NL'ye geçişteki kayda dikkat edin, Windows ve Unix arasındaki farkları verir. (Windows, elbette, Unix'ten daha yenidir, bu yüzden bu semantik kaymayı benimsemedi. CR kullanan Mac'lerin geçmişini bilmiyorum.) Birçok metin düzenleyicisi bu üç formatın herhangi birindeki dosyaları okuyabilir ve aralarında dönüştürme yapabilir , ancak tüm yardımcı programlar bunu yapamaz.

Form beslemesi biraz daha ilginçtir (daha az yaygın olarak kullanılmasına rağmen) ve sayfa ayırıcısının olağan tanımıyla, yalnızca satırlar arasında (ör. NL, CRLF veya CR'nin yeni satırından sonra) veya başlangıçta veya dosyanın sonu.


10
OS X'in NL'yi satır sonlandırıcı olarak kullandığını, tıpkı Unix gibi (OS X bir Unix olduğu için) doğrulayabilirim . CR, Mac OS 9 ve önceki sürümlerde kullanıldı .
Rory O'Kane

1
FF karakter bugün garip görünebilir ("CTRL-G" çan karakter ile birlikte), ancak video ekranlar çok daha az yaygın ve veri kopya olarak basılı kopya terminalleri kullanıldığında daha fazla ilgi vardı.
Rick Sarvas

Bu yem kontrolü değil \x0cmi?
Tjorriemorrie

2
"CR kullanan Mac'lerin geçmişini bilmiyorum." Muhtemelen CR kullanarak Apple II'den geldi. CR, Commodore ve Tandy gibi diğer 8 bitlik sistemlerde de yaygındı. ASCII bu sistemlerde evrensel değildi: Commodore, LF 0x8d (!) Olan PETSCII'yi kullandı. Atari'nin hiç LF karakteri yoktu. Hangi nedenle olursa olsun, CR = 0x0d az çok standarttı.
Ssswift

125

\r satır başı ve imleci ben yapacağım gibi geri hareket ettirir-

printf("stackoverflow\rnine")
ninekoverflow

"imleç" dört satır uzunluğunda olduğu için imleci "yığın akışı" nın başlangıcına kaydırdığı ve başlangıç ​​dört karakterinin üzerine yazdığı anlamına gelir.

\n satırı değiştiren ve imleci yeni bir satırın başına götüren yeni satır karakteridir.

printf("stackoverflow\nnine")
stackoverflow
nine

\f form beslemedir, kullanımı eski hale gelmiştir ancak girinti vermek için kullanılır.

printf("stackoverflow\fnine")
stackoverflow
             nine

eğer ben şöyle yazarsam-

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

3
Ancak bu örnek üst düzey dillerde çalışmaz!
Sina Karvandi

@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Yaparım: Linux kabuğunda printfcoreutils yardımcı programını kullanarak en azından aynısını yapabilirsiniz . Ya da echo -enbir bash yerleşik olanı kullanarak .
Ruslan

Tüm satırları bir dosyada tek satır olarak nasıl aktarabilirim?
Paras Singh

8
Form beslemesi girinti için kullanılmaz. Bunlardan azını bir yazıcıya gönderirseniz kağıt tükürür. \fAslında tanımladığınız şey \v- her ikisi de konsolda aynı görünen dikey bir sekme.
cprn

printf("123\f456\f789");konsolda /> <bold> 123456789 </bold> ifadesini gösterir.
Mayur

31

Wikipedia'ya bir göz atın :

ASCII veya uyumlu bir karakter kümesine dayanan sistemler ayrı ayrı LF (Satır besleme, '\ n', 0x0A, 10 ondalık) veya CR (Satır başı, '\ r', 0x0D, ondalık 13) veya CR'yi kullanır LF (CR + LF, 0x0D 0x0A). Bu karakterler yazıcı komutlarını temel alır: Satır besleme, bir satır kağıdın yazıcıdan beslenmesi gerektiğini ve satır başı, yazıcı satırının geçerli satırın başına dönmesi gerektiğini belirtir.


25

\fsayfa sonu için kullanılır. Konsolda herhangi bir efekt göremezsiniz. Ancak bu karakter sabitini dosyanızda kullandığınızda farkı görebilirsiniz.

Diğer bir örnek olarak, çıktınızı bir dosyaya yeniden yönlendirebiliyorsanız, bir dosya yazmanız veya dosya işlemeyi kullanmanız gerekmez.

Örneğin:

Bu kodu c ++ ile yazın

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

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

}

ve bunu derlediğinizde bir exe üretir (örneğin abc.exe)

bunu kullanarak çıktılarınızı bir dosyaya yeniden yönlendirebilirsiniz:

abc > xyz.doc

sonra dosyayı açın merhaba ve hiiiixyz.doc arasındaki gerçek sayfa sonu görebilirsiniz ....


21

Yukarıdaki bilgiler dışında, hala ilginç bir LF (\ n) ve CR (\ r) geçmişi vardır. [Asıl yazar: 阮一峰 Kaynak: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Bilgisayar çıkmadan önce Teletype Model 33 adında bir tür teleprinter vardı. Her biri 10 karakter basabilir ikinci. Ancak bununla ilgili bir sorun var, her satırı yazdırmayı bitirdikten sonra, 2 satıra basma zamanı olan bir sonraki satıra geçmek 0,2 saniye sürecek. Bu 0,2 saniye boyunca yeni bir karakter aktarılırsa, bu yeni karakter kaybolur.

Bu yüzden bilim adamları bu sorunu çözmenin bir yolunu buldular, her satırdan sonra iki bitiş karakteri ekliyorlar, biri yazıcıya yazdırma kafasını sola getirmesini söyleyen 'Taşıyıcı dönüşü'; diğeri 'Satır besleme', yazıcıya kağıdı 1 satır yukarı taşımasını söyler.

Daha sonra bilgisayar popüler oldu, bu iki kavram bilgisayarlarda kullanıldı. O zaman, depolama cihazı çok pahalıydı, bu yüzden bazı bilim adamları her satırın sonuna iki karakter eklemenin pahalı olduğunu söyledi, biri yeterli, bu yüzden hangisinin kullanılacağı konusunda bazı argümanlar var.

UNIX / Mac ve Linux'ta her satırın sonuna '\ n', Windows'ta her satırın sonuna '\ r \ n' konur. Bu kullanımın sonucu, Windows'ta açılırsa UNIX / Mac'teki dosyaların tek bir satırda görüntülenmesidir. Windows'daki dosya, UNIX veya Mac'te açılırsa her satırın sonunda bir ^ M olacaktır.


1
OSX'in piyasaya sürülmesiyle (BSD unix tabanlı), Mac '\ n' - Unix satır sonlarına geçti.
Jonathan Cross

"Windows'ta açılırsa UNIX / Mac'teki dosyalar tek bir satırda görüntülenir." WRITE.EXE(diğer adıyla Wordpad) bunları gayet iyi görüntüleyebilir.
thecarpy

18

Eski kağıt yazıcı terminallerinde, bir sonraki hatta ilerlemek için iki işlem vardı: yazdırma kafasını yatay tarama aralığının başlangıcına (satır başı) ve yazdırılmakta olan kağıt rulosuna ilerletme (satır besleme).

Artık kağıt yazıcı terminalleri kullanmadığımızdan, bu eylemler artık gerçekten alakalı değil, ancak sinyal vermek için kullanılan karakterler çeşitli enkarnasyonlarda takılı kaldı.


Aslında 'taşıyıcı dönüşü' yazdırma kafasını sola hareket ettirmez, plakayı sağa taşıyan taşıyıcıyı hareket ettirir. Bunu yapmak için sol el tarafından çalıştırılan uzun bir kol vardı. Bkz en.wikipedia.org/wiki/Typewriter
Mark LAKATA

2
@MarkLakata Daktilolar için doğru, ancak bu cevap eski yazdırma terminalleri hakkında. Örneğin, DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona

12

Bir IBM 1403 darbeli yazıcıyı düşünün. CR yazdırma kafasını satırın başına getirdi, ancak kağıdı ilerletmedi. Bu, bir satıra birden fazla çıktı satırı yerleştirerek "üst baskı" yapılmasına izin verdi. BOLD baskı gibi alt çizgi gibi şeylere bu şekilde ulaşıldı. LF kağıdı bir satır ilerletti. CR olmasaydı, LF yazdırma kafasını hareket ettirmediğinden sonraki satır aşamalı bir adım olarak yazdırılır. FF kağıdı bir sonraki sayfaya ilerletti. Genellikle yazdırma kafasını yeni sayfadaki ilk satırın başlangıcına taşıdı, ancak bunun için CR'ye ihtiyacınız olabilir. Emin olmak için, çoğu programcı bir sayfadaki son satırın sonunda CRLF yerine CRFF'yi kodlamıştır, çünkü FF tarafından oluşturulan ekstra bir CR önemli değildir.


Taşıyıcı dönüşünün tam anlamını açıklayan tek cevap budur.
Lee

12

Kısacası :

Carriage_return ( \rveya 0xD): at kontrol altına almak için başlayan bir aynı hat .

(Line_Feed \nya 0xA): at kontrolünü elinize için başlangıç ve sonraki satırda .

(form_feed \fya 0xC): at kontrol altına almak için başlayan bir sonraki sayfaya .


2
Bunun gibi özlü cevaplar teşvik edilmelidir.
user5280911

10

Ek olarak,

1, satırbaşı : bu yazıcı terminolojisi anlamına gelir baskı yerini geçerli satırın başına. Bilgisayar dünyasında, çoğu durumda mevcut hattın başına dönmek anlamına gelir, ancak nadiren yeni hattın anlamına gelir.

2, hat besleme : Bu yazıcı bir satır ilerleyen anlamına gelen bir yazıcı terminolojisi. Dolayısıyla, satır başı ve Satır besleme, yeni bir satırın başında yazdırmaya başlamak için birlikte kullanılır. Bilgisayar dünyasında genellikle satırsonu ile aynı anlama sahiptir.

3, Form besleme : Bu bir yazıcı terminolojisi, bu konudaki açıklamayı seviyorum .

1980'lerin tarzı bir yazıcı için programlama yapıyorsanız, kağıdı çıkarır ve yeni bir sayfa başlatır. Asla buna ihtiyaç duymayacağından neredeyse kesin.

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

Neredeyse kullanılmıyor ve başvurabilirsiniz Escape dizisi \ f - form feed'e - tam olarak nedir? Ayrıntılı açıklama için.

Bazı platformlarda yeni satır anlamına gelmek için CR veya LF veya CRLF kullanabiliriz, ancak yeni satır diğer bazı platformlarda onlar tarafından duramaz. Bakın wiki Newline'a bakın.

LF: Multics, Unix ve Unix benzeri sistemler (Linux, OS X, FreeBSD, AIX, Xenix, vb.), BeOS, Amiga, RISC OS ve diğerleri

CR: Commodore 8 bit makineler, Acorn BBC, ZX Spectrum, TRS-80, Apple II ailesi, Oberon, sürüm 9'a kadar klasik Mac OS, MIT Lisp Makinesi ve OS-9

RS: QNX POSIX öncesi uygulama

0x9B: ASCII'nin ATASCII varyantını kullanan Atari 8 bit makineleri (ondalık olarak 155)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, vb.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad TBM ve diğer pek çok erken Unix olmayan ve IBM dışı işletim sistemi

LF + CR: Palamut BBC ve RISC OS makaralı metin çıktısı.


3

"\ n" satır besleme karakteridir. Şimdiki satırı bitirmek ve okuyan herkes için yeni bir satıra gitmek demektir.


3

Taşıyıcı geri dönüşü ve satır besleme de daktilolara atıfta bulunur, çünkü taşıyıcının sol tarafındaki tutamağa küçük bir itme ile (kağıdın gittiği yer), kağıt silindirin etrafında küçük bir miktar döndürür ve tek satırlık belge. Bir satır yazmayı bitirdiyseniz ve bir sonrakine devam etmek istiyorsanız, hem bir satır ilerleyerek hem de şaryoyu tamamen sağa kaydırarak daha sonra zorladınız, ardından şaryo her tuşa basarken soldan sağa tekrar yazmaya devam ettiniz. . Söylemeye gerek yok, kelime kaydırma, çağın tüm kelime işlemesi için varsayılan ayardı. P: D


2

Bunlar "yeni çizgi" kavramıyla ilgili basım dışı karakterler. \ n satır besleme. taşıma dönüşüdür. Farklı platformlarda, geçerli yeni bir çizgiye göre farklı anlamları vardır. Pencerelerde yeni bir satır \ r \ n. Linux'ta, \ n. Mac'te, \ r.

Pratikte, bunları herhangi bir dizeye koyarsınız ve dizenin çıktısı üzerinde etkisi olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.