การขึ้นบรรทัดใหม่, การป้อนบรรทัดและการป้อนฟอร์มคืออะไร


500

ความหมายของตัวควบคุมต่อไปนี้คืออะไร:

  1. การคืนสินค้า

  2. ฟีดบรรทัด

  3. ฟีดรูปแบบ


14
"การคืนรถ" หมายถึงอะไร ฉันไม่เห็น "carriage" "return" บนแล็ปท็อปของฉัน : s
Jean Hominal

12
@JeanHominal carriage นั้นหมายถึงเคอร์เซอร์ (หรือตัวชี้ในเครื่องพิมพ์ดีดโบราณ) และ return หมายถึงการกลับไปที่จุดเริ่มต้นของบรรทัดนั้น
SOFe

ฉันไม่เห็นสายใด ๆ ที่ถูกยกเลิก (หรือบานหน้าต่างกระจกใด ๆ สำหรับเรื่องนั้น) ในหน้าต่าง "terminal" ของฉัน "และไม่มี" teletype "ต่ออยู่กับ / dev / tty1 พวกเขาทั้งหมดกลายเป็นคำอุปมาอุปมัย
Piskvor ออกจากอาคาร

คำตอบ:


621

Carriage returnหมายถึงการกลับไปที่จุดเริ่มต้นของบรรทัดปัจจุบันโดยไม่ลดระดับลง ชื่อนั้นมาจากแคร่ตลับหมึกของเครื่องพิมพ์เนื่องจากจอภาพมีน้อยมากเมื่อชื่อประกาศเกียรติคุณ นี้จะหนีกันทั่วไปว่าเป็น\rย่อCRและมีค่า ASCII หรือ130x0D

Linefeedหมายถึงการเลื่อนลงไปยังบรรทัดถัดไป แม้กระนั้นมันได้รับการ repurposed และเปลี่ยนชื่อ ใช้เป็น "newline" มันจะยุติบรรทัด (โดยทั่วไปสับสนกับการแยกบรรทัด) นี้จะหนีกันทั่วไปว่าเป็น\nย่อLFหรือ NL และมีค่า ASCII หรือ10 CRLF ( แต่ไม่ CRNL) ใช้สำหรับทั้งคู่0x0A\r\n

ฟีดของฟอร์มหมายถึงเลื่อนลงไปที่ "หน้า" ถัดไป มันถูกใช้โดยทั่วไปเป็นตัวคั่นหน้า แต่ตอนนี้ยังใช้เป็นตัวคั่นส่วน (มันถูกใช้อย่างผิดปกติในซอร์สโค้ดเพื่อแบ่งฟังก์ชั่นที่เป็นอิสระทางตรรกะหรือกลุ่มของฟังก์ชั่น) โปรแกรมแก้ไขข้อความสามารถใช้ตัวละครนี้เมื่อคุณ "แทรกตัวแบ่งหน้า" นี้จะหนีกันทั่วไปว่าเป็น\fย่อFFและมีค่า ASCII หรือ120x0C


ในฐานะตัวควบคุมอาจตีความได้หลายวิธี

ความแตกต่างที่พบบ่อยที่สุด (และน่าจะเป็นสิ่งเดียวที่ควรค่าแก่การกังวล) คือบรรทัดที่ลงท้ายด้วย CRLF บน Windows, NL บน Unix-like และ CR สำหรับ Mac รุ่นเก่า (สถานการณ์เปลี่ยนไปด้วย OS X เป็น Unix) สังเกตว่าการเปลี่ยนความหมายจาก LF เป็น NL สำหรับตัวอักษรเดียวกันนั้นให้ความแตกต่างระหว่าง Windows และ Unix (Windows เป็นของใหม่กว่า Unix ดังนั้นจึงไม่ได้ใช้การเปลี่ยนความหมายนี้ฉันไม่ทราบประวัติของ Mac ที่ใช้ CR) ตัวแก้ไขข้อความจำนวนมากสามารถอ่านไฟล์ในรูปแบบทั้งสามนี้และแปลงระหว่างพวกเขา แต่ไม่สามารถใช้ประโยชน์ได้ทั้งหมด

แบบฟอร์มฟีดค่อนข้างน่าสนใจ (แม้ว่าจะใช้น้อยกว่าโดยตรง) และด้วยคำจำกัดความตามปกติของตัวคั่นหน้ามันสามารถเกิดขึ้นได้ระหว่างบรรทัดเท่านั้น (เช่นหลังจากลำดับบรรทัดใหม่ของ NL, CRLF หรือ CR) หรือตอนเริ่มต้นหรือ จุดสิ้นสุดของไฟล์


10
ฉันสามารถยืนยันได้ว่าOS Xใช้ NL เป็นตัวยุติบรรทัดเช่นเดียวกับ Unix (เพราะ OS X เป็น Unix) CR ถูกใช้ในMac OS 9และต่ำกว่า
Rory O'Kane

1
FF char อาจดูแปลก ๆ ในวันนี้ (พร้อมกับ "CTRL-G" bell char) แต่มันกลับมีความเกี่ยวข้องมากขึ้นเมื่อการแสดงวิดีโอเป็นเรื่องที่พบได้น้อยกว่ามาก
Rick Sarvas

การควบคุมฟีดนั้นไม่ใช่\x0cหรือ
Tjorriemorrie

2
"ฉันไม่รู้ประวัติของ Mac ที่ใช้ CR" อาจมาจาก Apple II โดยใช้ CR CR เป็นเรื่องปกติในระบบ 8 บิตอื่น ๆ เช่นกันเช่น Commodore และ Tandy ASCII ไม่ได้เป็นสากลในระบบเหล่านี้: Commodore ใช้ PETSCII ซึ่งมี LF ที่ 0x8d (!) อาตาริไม่มีนิสัย LF เลย ไม่ว่าจะด้วยเหตุผลใดก็ตาม CR = 0x0d เป็นมาตรฐานที่มากขึ้นหรือน้อยลง
Ssswift

125

\r คือ carriage return และเลื่อนเคอร์เซอร์กลับมาถ้าฉันจะทำ

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
แต่ตัวอย่างนี้ใช้ไม่ได้กับภาษาระดับสูง!
Sina Karvandi

@ ᔕฉันᑎᗩKᗩᖇᐯᗩᑎᗪฉันทำได้: อย่างน้อยคุณก็สามารถทำเช่นเดียวกันใน Linux shell โดยใช้printfยูทิลิตี้จาก coreutils หรือแม้กระทั่งการใช้echo -enซึ่งเป็นทุบตี builtin
Ruslan

วิธีส่งผ่านทุกบรรทัดเป็นหนึ่งบรรทัดในไฟล์ได้อย่างไร?
Paras Singh

8
ฟีดฟอร์มไม่ได้ใช้สำหรับการเยื้อง หากคุณส่งไม่กี่คนไปยังเครื่องพิมพ์มันจะพ่นกระดาษออกมา สิ่งที่คุณอธิบายตามที่\fเป็นจริง\v- แท็บแนวตั้งให้ทั้งคู่ดูเหมือนกันในคอนโซล
cprn

printf("123\f456\f789");แสดง /> <bold> 123456789 </bold> บนคอนโซล
Mayur

31

ดูที่Wikipedia :

ระบบที่อิงตาม ASCII หรือชุดอักขระที่เข้ากันได้ใช้ LF (Line feed, '\ n', 0x0A, 10 ในรูปทศนิยม) หรือ CR (Carriage return, '\ 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 วินาทีตัวละครใหม่นี้จะหายไป

ดังนั้นนักวิทยาศาสตร์จึงค้นพบวิธีการแก้ปัญหานี้พวกเขาเพิ่มตัวละครลงท้ายสองตัวหลังจากแต่ละบรรทัดหนึ่งตัวคือ 'Carriage return' ซึ่งบอกให้เครื่องพิมพ์นำหัวพิมพ์ไปทางซ้าย; อีกอันหนึ่งคือ 'การป้อนบรรทัด' มันบอกให้เครื่องพิมพ์เลื่อนกระดาษขึ้น 1 บรรทัด

ต่อมาคอมพิวเตอร์กลายเป็นที่นิยมแนวคิดสองข้อนี้ใช้กับคอมพิวเตอร์ ในเวลานั้นอุปกรณ์เก็บข้อมูลมีราคาแพงมากดังนั้นนักวิทยาศาสตร์บางคนบอกว่ามันแพงที่จะเพิ่มตัวละครสองตัวที่ส่วนท้ายของแต่ละบรรทัดหนึ่งตัวก็เพียงพอแล้วจึงมีข้อโต้แย้งบางประการเกี่ยวกับสิ่งที่จะใช้

ใน UNIX / Mac และ Linux จะใส่ '\ n' ในตอนท้ายของแต่ละบรรทัดใน Windows จะใส่ '\ r \ n' ที่ท้ายบรรทัดแต่ละบรรทัด ผลที่ตามมาของการใช้นี้คือไฟล์ใน UNIX / Mac จะแสดงในหนึ่งบรรทัดหากเปิดใน Windows ในขณะที่ไฟล์ใน Windows จะมีหนึ่ง ^ M ที่ส่วนท้ายของแต่ละบรรทัดหากเปิดใน UNIX หรือ Mac


1
ด้วยการเปิดตัว OSX (อิงตาม BSD unix) Mac ก็เปลี่ยนเป็น '\ n' - ปลายสาย Unix
Jonathan Cross

"ไฟล์ใน UNIX / Mac จะแสดงในหนึ่งบรรทัดหากเปิดใน Windows" WRITE.EXE(aka Wordpad) สามารถแสดงผลได้อย่างดี
thecarpy

18

ที่หน้ากระดาษเครื่องพิมพ์เก่าให้เข้าสู่บรรทัดถัดไปที่เกี่ยวข้องกับการดำเนินการสองอย่าง: เลื่อนหัวพิมพ์กลับไปที่จุดเริ่มต้นของช่วงสแกนแนวนอน (carriage return) และเลื่อนม้วนกระดาษที่กำลังพิมพ์

เนื่องจากเราไม่ได้ใช้เทอร์มินัลเครื่องพิมพ์กระดาษอีกต่อไปการกระทำเหล่านั้นจึงไม่เกี่ยวข้องกันอีกต่อไป แต่ตัวละครที่ใช้เพื่อส่งสัญญาณนั้นติดอยู่ในสาขาต่าง ๆ


ที่จริงแล้ว 'carriage return' ไม่ได้ย้ายหัวพิมพ์ไปทางซ้าย แต่ย้าย carriage ที่ถือแท่นวางไปทางขวา เคยมีคันโยกยาวที่มือซ้ายใช้ทำสิ่งนี้ ดูen.wikipedia.org/wiki/Typewriter
Mark Lakata

2
@MarkLakata True สำหรับเครื่องพิมพ์ดีด แต่คำตอบนี้เกี่ยวกับเทอร์มินัลการพิมพ์เก่า ตัวอย่างเช่น DEC LA36 ( columbia.edu/cu/computinghistory/la36.html )
Peter Cardona

12

พิจารณาเครื่องพิมพ์ผลกระทบของ IBM 1403 CR ย้ายหัวพิมพ์ไปยังจุดเริ่มต้นของบรรทัด แต่ไม่ได้เลื่อนกระดาษ สิ่งนี้อนุญาตให้ "overprinting" วางหลายบรรทัดในหนึ่งบรรทัด สิ่งที่ต้องการการขีดเส้นใต้ทำได้ด้วยวิธีนี้เช่นเดียวกับการพิมพ์ตัวหนา LF ขั้นสูงกระดาษหนึ่งบรรทัด หากไม่มี CR บรรทัดถัดไปจะพิมพ์เป็นขั้นตอนที่เซเนื่องจาก LF ไม่เลื่อนหัวพิมพ์ FF ขั้นสูงกระดาษไปยังหน้าถัดไป โดยทั่วไปแล้วมันยังย้ายหัวพิมพ์ไปที่จุดเริ่มต้นของบรรทัดแรกในหน้าใหม่ แต่คุณอาจต้องใช้ CR สำหรับสิ่งนั้น เพื่อให้แน่ใจว่าโปรแกรมเมอร์ส่วนใหญ่เขียนรหัส CRFF แทน CRLF ที่ท้ายบรรทัดสุดท้ายในหน้าเพราะ CR พิเศษที่สร้างโดย FF ไม่สำคัญ


นี่เป็นคำตอบเดียวที่อธิบายความหมายทั้งหมดของการคืนรถ
ลี

12

ในระยะสั้น:

Carriage_return ( \rหรือ0xD): ในการใช้การควบคุมที่เริ่มต้นของบรรทัดเดียวกัน

Line_Feed ( \nหรือ0xA): ในการใช้การควบคุมที่เริ่มต้นของบรรทัดถัดไป

form_feed ( \fหรือ0xC): ในการใช้การควบคุมที่เริ่มต้นของหน้าถัดไป


2
คำตอบสั้น ๆ เช่นนี้ควรได้รับการสนับสนุน
user5280911

10

เป็นอาหารเสริม

1, Carriage return : เป็นคำศัพท์เครื่องพิมพ์หมายถึงการเปลี่ยนตำแหน่งการพิมพ์เป็นจุดเริ่มต้นของบรรทัดปัจจุบัน ในโลกคอมพิวเตอร์หมายถึงกลับไปที่จุดเริ่มต้นของบรรทัดปัจจุบันในกรณีส่วนใหญ่ แต่หมายถึงบรรทัดใหม่ไม่ค่อย

2, การป้อนบรรทัด : เป็นคำศัพท์เครื่องพิมพ์หมายถึงการเลื่อนกระดาษหนึ่งบรรทัด ดังนั้น Carriage return และ Line feed จะถูกใช้ร่วมกันเพื่อเริ่มพิมพ์ที่จุดเริ่มต้นของบรรทัดใหม่ ในโลกคอมพิวเตอร์นั้นโดยทั่วไปมีความหมายเหมือนกับบรรทัดใหม่

3, ฟีดฟอร์ม : เป็นคำศัพท์เครื่องพิมพ์ฉันชอบคำอธิบายในหัวข้อนี้

หากคุณกำลังเขียนโปรแกรมสำหรับเครื่องพิมพ์สไตล์ปี 1980 มันจะเปิดกระดาษและเริ่มหน้าใหม่ คุณมั่นใจได้อย่างแท้จริงว่าไม่ต้องการมัน

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

มันเกือบจะล้าสมัยแล้วและคุณสามารถอ้างถึงEscape sequence \ f - ฟอร์มฟีด - มันคืออะไรกันแน่? สำหรับคำอธิบายโดยละเอียด

หมายเหตุเราสามารถใช้ CR หรือ LF หรือ CRLF เพื่อขึ้นบรรทัดใหม่ในบางแพลตฟอร์ม แต่ขึ้นบรรทัดใหม่ไม่สามารถยืนได้ในแพลตฟอร์มอื่น ๆ อ้างถึงวิกิ Newlineสำหรับรายละเอียด

LF: ระบบ Multics, Unix และ Unix (Linux, OS X, FreeBSD, AIX, Xenix, ฯลฯ ), BeOS, Amiga, RISC OS และอื่น ๆ

CR: เครื่องพลเรือจัตวา 8 บิต, Acorn BBC, ZX Spectrum, TRS-80, ตระกูล Apple II, Oberon, Mac OS คลาสสิคถึงเวอร์ชัน 9, MIT Lisp Machine และ OS-9

RS: การนำ QNX ไปใช้ก่อน POSIX

0x9B: เครื่อง Atari 8 บิตโดยใช้ตัวแปร ATASCII ของ ASCII (155 ในรูปทศนิยม)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, ฯลฯ ), DEC TOPS-10, RT-11, CP / M, MP / M, อาตาริ TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC และอื่น ๆ ส่วนใหญ่ไม่ใช่ระบบปฏิบัติการ Unix และไม่ใช่ IBM

LF + CR: Acorn BBC และ RISC สปูลเอาท์พุทข้อความ


3

"\ n" เป็นอักขระตัวดึงบรรทัด มันหมายถึงจบบรรทัดปัจจุบันและไปที่บรรทัดใหม่สำหรับทุกคนที่อ่านมัน


3

Carriage return และ Line feed ยังมีการอ้างอิงไปยังเครื่องพิมพ์ดีดด้วยเมื่อกดที่ด้ามเล็ก ๆ ที่ด้านซ้ายของแคร่ (ที่ที่ไปกระดาษ) กระดาษจะหมุนรอบ ๆ กระบอกสูบเล็กน้อย เอกสารหนึ่งบรรทัด หากคุณพิมพ์หนึ่งบรรทัดเสร็จแล้วและต้องการที่จะดำเนินการต่อไปคุณจะผลักให้หนักขึ้นทั้งเส้นที่เลื่อนและเลื่อนแคร่ตลับหมึกไปทางขวาจนสุดจากนั้นกลับมาพิมพ์จากซ้ายไปขวาอีกครั้ง . การตัดคำเป็นการตั้งค่าเริ่มต้นสำหรับการประมวลผลคำทั้งหมดในยุคนั้น P: D


2

เป็นอักขระที่ไม่ได้พิมพ์ซึ่งเกี่ยวข้องกับแนวคิดของ "บรรทัดใหม่" \ n คือ linefeed \ r คือการคืนสินค้า บนแพลตฟอร์มที่ต่างกันพวกเขามีความหมายต่างกันเมื่อเทียบกับบรรทัดใหม่ที่ถูกต้อง ใน windows บรรทัดใหม่คือ \ r \ n ใน linux \ n ใน mac \ r

ในทางปฏิบัติคุณใส่ไว้ในสตริงใด ๆ และมันจะมีผลต่อการพิมพ์ออกจากสตริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.