Che cosa sono ritorno a capo, avanzamento riga e feed modulo?


501

Qual è il significato dei seguenti caratteri di controllo:

  1. Ritorno del trasporto

  2. Avanzamento riga

  3. Feed modulo


14
Che cosa significa "ritorno a capo"? Non vedo alcun "carrello" "ritorno" sul mio laptop. : s
Jean Hominal,

12
@JeanHominal il carrello in pratica significa il cursore (o il puntatore nelle macchine da scrivere antiche), e return significa tornare all'inizio di quella riga.
SOF

Non vedo alcun cavo terminato (o qualsiasi lastra di vetro per quella materia) nella mia "finestra" "terminale", né c'è un "teletipo" collegato a / dev / tty1. Sono diventati tutti metafore.
Piskvor lasciò l'edificio il

Risposte:


622

Ritorno a capo significa tornare all'inizio della riga corrente senza avanzare verso il basso. Il nome deriva dal carrello di una stampante, poiché i monitor erano rari quando il nome veniva coniato. Questo è comunemente sfuggito a \r, abbreviato CR , e ha valore ASCII 13o 0x0D.

Linefeed significa avanzare verso il basso alla riga successiva; tuttavia, è stato riproposto e rinominato. Utilizzato come "newline", termina le linee (comunemente confuse con le linee di separazione ). Questo è comunemente sfuggito a \n, abbreviato LF o NL, e ha valore ASCII 10o 0x0A. CRLF (ma non CRNL) viene utilizzato per la coppia \r\n.

Il feed del modulo significa avanzare verso il basso fino alla "pagina" successiva. Era comunemente usato come separatore di pagine, ma ora è anche usato come separatore di sezioni. (Non è comunemente usato nel codice sorgente per dividere funzioni o gruppi di funzioni logicamente indipendenti.) Gli editor di testo possono usare questo carattere quando si "inserisce un'interruzione di pagina". Questo è comunemente sfuggito a \f, abbreviato FF e ha valore ASCII 12o 0x0C.


Come personaggi di controllo, possono essere interpretati in vari modi.

La differenza più comune (e probabilmente l'unica degna di cui preoccuparsi) è che le linee finiscono con CRLF su Windows, NL su Mi piace Unix e CR su Mac più vecchi (la situazione è cambiata con OS X per essere come Unix). Nota il passaggio di significato da LF a NL, per lo stesso identico carattere, dà le differenze tra Windows e Unix. (Windows è, ovviamente, più recente di Unix, quindi non ha adottato questo spostamento semantico. Non conosco la storia dei Mac che usano CR.) Molti editor di testi possono leggere file in uno di questi tre formati e convertirli tra di loro , ma non tutte le utility possono farlo.

Il feed del modulo è un po 'più interessante (anche se meno comunemente usato direttamente) e, con la solita definizione di separatore di pagina, può venire solo tra le righe (ad esempio dopo la sequenza di nuova riga di NL, CRLF o CR) o all'inizio o fine del file.


10
Posso confermare che OS X utilizza NL come terminatore di linea, proprio come Unix (poiché OS X è un Unix). CR è stato utilizzato in Mac OS 9 e versioni precedenti .
Rory O'Kane,

1
Il char FF oggi può sembrare strano (insieme al char bell "CTRL-G") ma aveva una maggiore rilevanza quando i display video erano molto meno comuni e i terminali cartacei venivano usati come display dati.
Rick Sarvas,

Non è questo il controllo del feed \x0c?
Tjorriemorrie,

2
"Non conosco la storia dei Mac che usano CR." Ciò probabilmente proveniva dall'Apple II usando CR. CR era comune anche su altri sistemi a 8 bit, come Commodore e Tandy. ASCII non era universale su questi sistemi: Commodore usava PETSCII, che aveva LF a 0x8d (!). Atari non aveva alcun personaggio LF. Per qualsiasi motivo, CR = 0x0d era più o meno lo standard.
Ssswift,

125

\r è il ritorno a capo e sposta il cursore indietro come se lo farò-

printf("stackoverflow\rnine")
ninekoverflow

significa che ha spostato il cursore all'inizio di "stackoverflow" e sovrascrive i quattro caratteri iniziali poiché "nove" è lungo quattro caratteri.

\n è un nuovo carattere di linea che cambia la linea e porta il cursore all'inizio di una nuova linea come-

printf("stackoverflow\nnine")
stackoverflow
nine

\f è un feed di form, il suo uso è diventato obsoleto ma è usato per dare un rientro simile

printf("stackoverflow\fnine")
stackoverflow
             nine

se scriverò come-

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

3
Ma questo esempio non funziona in lingue di alto livello!
Sina Karvandi,

@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ I lo fa: puoi almeno fare lo stesso nella shell Linux usando l' printfutility di coreutils. O anche usando echo -enquale è un built-in bash.
Ruslan,

Come passare tutte le linee come un'unica linea in un file?
Paras Singh,

8
Il feed del modulo non viene utilizzato per il rientro. Se invii alcuni di questi a una stampante, sputerà la carta. Quello che hai descritto \fè in realtà \v: una scheda verticale, a condizione che entrambi abbiano lo stesso aspetto nella console.
cprn

printf("123\f456\f789");mostra /> <bold> 123456789 </bold> sulla console.
Mayur,

31

Dai un'occhiata a Wikipedia :

I sistemi basati su ASCII o un set di caratteri compatibili utilizzano LF (avanzamento riga, '\ n', 0x0A, 10 in decimale) o CR (ritorno a capo, '\ r', 0x0D, 13 in decimale) singolarmente o CR seguito da LF (CR + LF, 0x0D 0x0A). Questi caratteri si basano sui comandi della stampante: l'alimentazione della riga indicava che una riga di carta doveva essere espulsa dalla stampante e un ritorno a capo indicava che il carrello della stampante doveva tornare all'inizio della riga corrente.


25

\fviene utilizzato per l'interruzione di pagina. Non è possibile vedere alcun effetto nella console. Ma quando usi questa costante di carattere nel tuo file, puoi vedere la differenza.

Un altro esempio è che se è possibile reindirizzare l'output su un file, non è necessario scrivere un file o utilizzare la gestione dei file.

Ad esempio:

Scrivi questo codice in c ++

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

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

}

e quando lo compili genera un exe (per es. abc.exe)

quindi puoi reindirizzare il tuo output su un file usando questo:

abc > xyz.doc

quindi apri il file xyz.docper vedere l'interruzione di pagina effettiva tra ciao e hiiii ....


21

Oltre alle informazioni di cui sopra, esiste ancora una storia interessante di LF (\ n) e CR (\ r). [Autore originale: 阮一峰 Fonte: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Prima che uscisse il computer, esisteva un tipo di teleprinter chiamato Teletype Model 33. Può stampare 10 caratteri ciascuno secondo. Ma c'è un problema con questo, dopo aver finito di stampare ogni riga, ci vorranno 0,2 secondi per passare alla riga successiva, che è tempo di stampare 2 caratteri. Se durante questi 0,2 secondi viene trasferito un nuovo personaggio, questo nuovo personaggio andrà perso.

Quindi gli scienziati hanno trovato un modo per risolvere questo problema, aggiungono due caratteri finali dopo ogni riga, uno è "Ritorno a capo", che è dire alla stampante di portare la testina di stampa a sinistra .; l'altro è "Avanzamento riga", indica alla stampante di spostare la carta in alto di 1 riga.

Più tardi, il computer è diventato popolare, questi due concetti sono utilizzati sui computer. A quel tempo, il dispositivo di archiviazione era molto costoso, quindi alcuni scienziati hanno detto che era costoso aggiungere due caratteri alla fine di ogni riga, uno è sufficiente, quindi ci sono alcuni argomenti su quale usare.

In UNIX / Mac e Linux, "\ n" viene inserito alla fine di ogni riga, in Windows, "\ r \ n" viene inserito alla fine di ogni riga. La conseguenza di questo uso è che i file in UNIX / Mac verranno visualizzati in una riga se aperti in Windows. Mentre il file in Windows avrà un ^ M alla fine di ogni riga se aperto in UNIX o Mac.


1
Con il rilascio di OSX (basato su BSD unix), il Mac è passato a '\ n' - terminazioni di linea Unix.
Jonathan Cross

"I file in UNIX / Mac verranno visualizzati in una riga se aperti in Windows." WRITE.EXE(aka Wordpad) possono visualizzarli bene.
giovedì

18

Sui vecchi terminali della stampante per carta, passare alla riga successiva comportava due azioni: spostare la testina di stampa all'inizio dell'intervallo di scansione orizzontale (ritorno del carrello) e far avanzare il rotolo di carta su cui stampare (avanzamento riga).

Dato che non usiamo più terminali per stampanti di carta, quelle azioni non sono più veramente rilevanti, ma i personaggi usati per segnalarli si sono bloccati in varie incarnazioni.


In realtà il "ritorno a capo" non sposta la testina di stampa verso sinistra, ma sposta il carrello che tiene il rullo verso destra. C'era una lunga leva che veniva azionata dalla mano sinistra per fare questo. Vedi en.wikipedia.org/wiki/Typewriter
Mark Lakata

2
@MarkLakata Vero per le macchine da scrivere, ma questa risposta riguarda i vecchi terminali di stampa. Ad esempio, DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona,

12

Prendi in considerazione una stampante a impatto IBM 1403. CR ha spostato la testina di stampa all'inizio della riga, ma NON ha fatto avanzare la carta. Ciò ha consentito la "sovrastampa", posizionando più righe di output su una riga. Cose come la sottolineatura sono state realizzate in questo modo, così come la stampa BOLD. LF ha avanzato la carta di una riga. Se non ci fosse CR, la riga successiva verrebbe stampata a passi sfalsati perché LF non ha spostato la testina di stampa. FF ha fatto avanzare il foglio alla pagina successiva. In genere ha anche spostato la testina di stampa all'inizio della prima riga nella nuova pagina, ma potrebbe essere necessario CR per questo. A dire il vero, la maggior parte dei programmatori ha codificato CRFF anziché CRLF alla fine dell'ultima riga di una pagina perché un CR aggiuntivo creato da FF non avrebbe importanza.


Questa è l'unica risposta che spiega il pieno significato del ritorno a capo.
Lee,

12

In breve :

Carriage_return ( \ro 0xD): per prendere il controllo all'inizio di stessa riga .

Line_Feed ( \no 0xA): per assumere il controllo all'inizio di riga successiva .

form_feed ( \fo 0xC): per assumere il controllo all'inizio della pagina successiva .


2
Una risposta concisa come questa dovrebbe essere incoraggiata.
user5280911

10

Come supplemento,

1, ritorno a capo : è una terminologia della stampante che significa cambiare la posizione di stampa all'inizio della riga corrente . Nel mondo dei computer, nella maggior parte dei casi significa tornare all'inizio della riga corrente, ma raramente rappresenta una nuova riga.

2, avanzamento riga : è una terminologia della stampante che significa avanzare la carta di una riga. Quindi ritorno a capo e avanzamento riga vengono utilizzati insieme per iniziare a stampare all'inizio di una nuova riga. Nel mondo dei computer, ha generalmente lo stesso significato di newline.

3, Feed modulo : è una terminologia della stampante, mi piace la spiegazione in questo thread .

Se stavi programmando per una stampante in stile anni '80, espellerebbe il foglio e inizierebbe una nuova pagina. Sei praticamente sicuro di non averne mai bisogno.

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

È quasi obsoleto e puoi fare riferimento alla sequenza di escape \ f - form feed - che cos'è esattamente? per una spiegazione dettagliata.

Nota, possiamo usare CR o LF o CRLF per rappresentare la nuova linea in alcune piattaforme, ma la nuova linea non può essere sostenuta da loro in alcune altre piattaforme. Fare riferimento alla wiki Newline per i dettagli.

LF: sistemi Multics, Unix e Unix (Linux, OS X, FreeBSD, AIX, Xenix, ecc.), BeOS, Amiga, RISC OS e altri

CR: macchine Commodore a 8 bit, Acorn BBC, ZX Spectrum, TRS-80, famiglia Apple II, Oberon, il classico Mac OS fino alla versione 9, MIT Lisp Machine e OS-9

RS: implementazione pre-POSIX QNX

0x9B: macchine Atari a 8 bit che utilizzano la variante ATASCII di ASCII (155 in decimale)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, ecc.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, CPC di Amstrad e la maggior parte dei primi sistemi operativi non Unix e non IBM

LF + CR: output di testo con spool della BBC Acorn e RISC OS.


3

"\ n" è il carattere di avanzamento riga. Significa terminare la riga attuale e passare a una nuova riga per chiunque la stia leggendo.


3

Il ritorno a capo e l'alimentazione di linea sono anche riferimenti alle macchine da scrivere, in quanto con una piccola spinta sulla maniglia sul lato sinistro del carrello (il punto in cui va la carta), la carta ruoterebbe di una piccola quantità attorno al cilindro, facendo avanzare il documentare una riga. Se hai finito di digitare una riga e desideri continuare con la successiva, hai spinto più forte, sia facendo avanzare una riga che facendo scorrere il carrello completamente verso destra, quindi riprendendo a digitare nuovamente da sinistra a destra mentre il carrello viaggiava con ogni sequenza di tasti . Inutile dire che il ritorno a capo automatico era l'impostazione predefinita per tutte le elaborazioni di testi dell'era. P: D


2

Questi sono caratteri non stampabili, relativi al concetto di "nuova linea". \ n è linefeed. è il ritorno a capo. Su piattaforme diverse hanno significati diversi, relativi a una nuova linea valida. In Windows, una nuova riga è \ r \ n. In Linux, \ n. In mac, \ r.

In pratica, li metti in qualsiasi stringa e ciò avrà effetto sulla stampa della stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.