Que sont le retour chariot, le saut de ligne et le saut de page?

501

Quelle est la signification des caractères de contrôle suivants:

  1. Retour chariot

  2. Saut de ligne

  3. Flux de formulaire

ashna
la source
14
Que signifie «retour chariot»? Je ne vois aucun "chariot" "rentrer" sur mon ordinateur portable. : s
Jean Hominal
12
@JeanHominal le chariot signifie essentiellement le curseur (ou le pointeur dans les anciennes machines à écrire), et return signifie revenir au début de cette ligne.
SOFe
Je ne vois aucun fil terminé (ni aucune vitre d'ailleurs) dans ma "fenêtre" de "terminal", ni de "télétype" attaché à / dev / tty1. Ils sont tous devenus des métaphores.
Piskvor a quitté le bâtiment

Réponses:

622

Le retour chariot signifie revenir au début de la ligne actuelle sans avancer vers le bas. Le nom vient du chariot d'une imprimante, car les moniteurs étaient rares lorsque le nom a été inventé. Ceci est généralement échappé comme \r, en abrégé CR , et a la valeur ASCII 13ou 0x0D.

Le saut de ligne signifie avancer vers la ligne suivante; cependant, il a été réutilisé et renommé. Utilisé comme "nouvelle ligne", il termine les lignes (souvent confondu avec les lignes de séparation ). Ceci est généralement échappé comme \n, abrégé LF ou NL, et a une valeur ASCII 10ou 0x0A. CRLF (mais pas CRNL) est utilisé pour la paire \r\n.

Le flux de formulaire signifie avancer vers la "page" suivante. Il était couramment utilisé comme séparateurs de pages, mais est maintenant également utilisé comme séparateurs de sections. (Il est rarement utilisé dans le code source pour diviser des fonctions ou des groupes de fonctions logiquement indépendants.) Les éditeurs de texte peuvent utiliser ce caractère lorsque vous "insérez un saut de page". Ceci est généralement échappé comme \f, abrégé FF , et a la valeur ASCII 12ou 0x0C.


En tant que caractères de contrôle, ils peuvent être interprétés de différentes manières.

La différence la plus courante (et probablement la seule qui mérite d'être inquiétée) est la fin des lignes avec CRLF sur Windows, NL sur Unix-like et CR sur les Mac plus anciens (la situation a changé avec OS X pour ressembler à Unix). Notez le changement de sens de LF à NL, pour le même caractère exact, donne les différences entre Windows et Unix. (Windows est, bien sûr, plus récent qu'Unix, il n'a donc pas adopté ce changement sémantique. Je ne connais pas l'histoire des Mac utilisant CR.) De nombreux éditeurs de texte peuvent lire des fichiers dans l'un de ces trois formats et convertir entre eux , mais pas tous les utilitaires.

Le flux de formulaire est un peu plus intéressant (même s'il est moins utilisé directement), et avec la définition habituelle du séparateur de pages, il ne peut venir qu'entre les lignes (par exemple après la séquence de nouvelle ligne NL, CRLF ou CR) ou au début ou fin du fichier.

Roberto Caboni
la source
10
Je peux confirmer que OS X utilise NL comme terminateur de ligne, tout comme Unix (car OS X est un Unix). CR a été utilisé sous Mac OS 9 et versions antérieures .
Rory O'Kane
1
Le caractère FF peut sembler étrange aujourd'hui (avec le caractère cloche "CTRL-G") mais il avait plus de pertinence à l'époque où les affichages vidéo étaient beaucoup moins courants et les terminaux de copie papier étaient utilisés comme affichages de données.
Rick Sarvas
N'est-ce pas le contrôle du flux \x0c?
Tjorriemorrie
2
"Je ne connais pas l'histoire des Mac utilisant CR." Cela provenait probablement de l'Apple II utilisant CR. CR était également commun sur d'autres systèmes 8 bits, comme le Commodore et Tandy. ASCII n'était pas universel sur ces systèmes: Commodore utilisait PETSCII, qui avait LF à 0x8d (!). Atari n'avait aucun caractère LF. Pour une raison quelconque, CR = 0x0d était plus ou moins standard.
Ssswift
125

\r est le retour chariot et recule le curseur comme si je le ferais-

printf("stackoverflow\rnine")
ninekoverflow

signifie qu'il a déplacé le curseur au début de "stackoverflow" et écrase les quatre premiers caractères car "neuf" est long de quatre caractères.

\n est un nouveau caractère de ligne qui change la ligne et amène le curseur au début d'une nouvelle ligne comme-

printf("stackoverflow\nnine")
stackoverflow
nine

\f est un flux de formulaire, son utilisation est devenue obsolète mais il est utilisé pour donner une indentation comme

printf("stackoverflow\fnine")
stackoverflow
             nine

si j'écris comme-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great
user3346547
la source
3
Mais cet exemple ne fonctionne pas dans les langages de haut niveau!
Sina Karvandi
@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Si c'est le cas: vous pouvez au moins faire de même dans le shell Linux en utilisant l' printfutilitaire de coreutils. Ou même en utilisant echo -ence qui est un bash intégré.
Ruslan
Comment passer toutes les lignes en une seule ligne dans un fichier?
Paras Singh
8
Le saut de page n'est pas utilisé pour l'indentation. Si vous en envoyez quelques-unes à une imprimante, cela crachera du papier. Ce que vous avez décrit \fest en fait \v- un onglet vertical, les deux étant identiques dans la console.
cprn
printf("123\f456\f789");affiche /> <bold> 123456789 </bold> sur la console.
Mayur
31

Jetez un œil à Wikipedia :

Les systèmes basés sur ASCII ou un jeu de caractères compatible utilisent individuellement LF (saut de ligne, '\ n', 0x0A, 10 en décimal) ou CR (retour chariot, '\ r', 0x0D, 13 en décimal), ou CR suivi de LF (CR + LF, 0x0D 0x0A). Ces caractères sont basés sur les commandes de l'imprimante: le saut de ligne indique qu'une ligne de papier doit sortir de l'imprimante et un retour chariot indique que le chariot de l'imprimante doit revenir au début de la ligne en cours.

tanascius
la source
25

\fest utilisé pour le saut de page. Vous ne pouvez voir aucun effet dans la console. Mais lorsque vous utilisez cette constante de caractère dans votre fichier, vous pouvez voir la différence.

Un autre exemple est que si vous pouvez rediriger votre sortie vers un fichier, vous n'avez pas besoin d'écrire un fichier ou d'utiliser la gestion des fichiers.

Par exemple:

Écrivez ce code en c ++

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

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

}

et lorsque vous compilez cela, il génère un exe (par exemple. abc.exe)

alors vous pouvez rediriger votre sortie vers un fichier en utilisant ceci:

abc > xyz.doc

puis ouvrez le fichier, xyz.docvous pouvez voir le saut de page réel entre hellooo et hiiii ....

Balram Dixit
la source
21

Outre les informations ci-dessus, il existe encore une histoire intéressante de LF (\ n) et CR (\ r). [Auteur original: 阮一峰 Source: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Avant la sortie de l'ordinateur, il y avait un type de téléscripteur appelé Teletype Model 33. Il peut imprimer 10 caractères chacun seconde. Mais il y a un problème avec cela, après avoir terminé l'impression de chaque ligne, il faudra 0,2 seconde pour passer à la ligne suivante, ce qui correspond au temps d'impression de 2 caractères. Si un nouveau personnage est transféré pendant cette 0,2 seconde, alors ce nouveau personnage sera perdu.

Les scientifiques ont donc trouvé un moyen de résoudre ce problème, ils ajoutent deux caractères de fin après chaque ligne, l'un est «Retour chariot», qui consiste à dire à l'imprimante de ramener la tête d'impression vers la gauche. l'autre est «Saut de ligne», il indique à l'imprimante de déplacer le papier d'une ligne vers le haut.

Plus tard, l'ordinateur est devenu populaire, ces deux concepts sont utilisés sur les ordinateurs. À cette époque, le périphérique de stockage était très cher, donc certains scientifiques ont dit qu'il était cher d'ajouter deux caractères à la fin de chaque ligne, un suffit, il y a donc des arguments sur lequel utiliser.

Sous UNIX / Mac et Linux, «\ n» est placé à la fin de chaque ligne, sous Windows, «\ r \ n» est placé à la fin de chaque ligne. La conséquence de cette utilisation est que les fichiers sous UNIX / Mac seront affichés sur une seule ligne s'ils sont ouverts sous Windows. Alors que le fichier sous Windows aura un ^ M à la fin de chaque ligne s'il est ouvert sous UNIX ou Mac.

wxie
la source
1
Avec la sortie d'OSX (basé sur BSD unix), le Mac est passé à la fin de ligne '\ n' - Unix.
Jonathan Cross
"Les fichiers sous UNIX / Mac seront affichés sur une seule ligne s'ils sont ouverts sous Windows." WRITE.EXE(aka Wordpad) peut très bien les afficher.
thecarpy
18

Sur les anciens terminaux d'imprimante à papier, passer à la ligne suivante impliquait deux actions: ramener la tête d'impression au début de la plage de numérisation horizontale (retour chariot) et avancer le rouleau de papier en cours d'impression (saut de ligne).

Puisque nous n'utilisons plus de terminaux pour imprimantes papier, ces actions ne sont plus vraiment pertinentes, mais les caractères utilisés pour les signaler se sont maintenus dans diverses incarnations.

ambre
la source
En fait, le «retour chariot» ne déplace pas la tête d'impression vers la gauche, mais déplace le chariot qui maintient la platine vers la droite. Avant, il y avait un long levier actionné par la main gauche. Voir en.wikipedia.org/wiki/Typewriter
Mark Lakata
2
@MarkLakata Vrai pour les machines à écrire, mais cette réponse concerne les anciens terminaux d'impression. Par exemple, le DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona
12

Prenons une imprimante à impact IBM 1403. CR a déplacé la tête d'impression au début de la ligne, mais n'a PAS avancé le papier. Cela a permis une "surimpression", en plaçant plusieurs lignes de sortie sur une seule ligne. Des choses comme le soulignement ont été réalisées de cette façon, tout comme l'imprimé BOLD. LF a avancé le papier d'une ligne. S'il n'y avait pas de CR, la ligne suivante s'imprimerait comme une étape décalée car LF ne bougeait pas la tête d'impression. FF a avancé le document à la page suivante. Il a également généralement déplacé la tête d'impression au début de la première ligne de la nouvelle page, mais vous pourriez avoir besoin de CR pour cela. Pour être sûr, la plupart des programmeurs ont codé CRFF au lieu de CRLF à la fin de la dernière ligne d'une page car un CR supplémentaire créé par FF n'aurait pas d'importance.

Dick Guertin
la source
C'est la seule réponse qui explique tout le sens du retour chariot.
Lee
12

En bref :

Carriage_return ( \rou 0xD): Pour prendre le contrôle au début de la même ligne .

Line_Feed ( \nou 0xA): Pour prendre le contrôle au début de la ligne suivante .

form_feed ( \fou 0xC): Pour prendre le contrôle au début de la page suivante .

Ritik Kamboj
la source
2
Une réponse succincte comme celle-ci devrait être encouragée.
user5280911
10

En complément,

1, retour chariot : il s'agit d'une terminologie d'imprimante qui signifie changer l'emplacement d'impression au début de la ligne en cours. Dans le monde informatique, cela signifie revenir au début de la ligne actuelle dans la plupart des cas, mais représente rarement une nouvelle ligne.

2, saut de ligne : c'est une terminologie d'imprimante qui signifie faire avancer le papier d'une ligne. Ainsi, le retour chariot et le saut de ligne sont utilisés ensemble pour commencer à imprimer au début d'une nouvelle ligne. Dans le monde informatique, il a généralement la même signification que la nouvelle ligne.

3, Flux de formulaire : c'est une terminologie d'imprimante, j'aime l'explication dans ce fil .

Si vous programmiez pour une imprimante de style années 80, elle éjecterait le papier et commencerait une nouvelle page. Vous êtes pratiquement certain de ne jamais en avoir besoin.

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

C'est presque obsolète et vous pouvez vous référer à la séquence d'échappement \ f - flux de formulaire - qu'est-ce que c'est exactement? pour une explication détaillée.

Remarque, nous pouvons utiliser CR ou LF ou CRLF pour représenter la nouvelle ligne sur certaines plates-formes, mais la nouvelle ligne ne peut pas être conservée par eux sur certaines autres plates-formes. Reportez-vous au wiki Newline pour plus de détails.

LF: Multics, Unix et systèmes de type Unix (Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS et autres

CR: machines Commodore 8 bits, Acorn BBC, ZX Spectrum, TRS-80, famille Apple II, Oberon, le Mac OS classique jusqu'à la version 9, MIT Lisp Machine et OS-9

RS: implémentation pré-POSIX de QNX

0x9B: machines Atari 8 bits utilisant la variante ATASCII d'ASCII (155 en décimal)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC et la plupart des autres premiers OS non Unix et non IBM

LF + CR: sortie de texte spoule Acorn BBC et RISC OS.

Eugène
la source
3

"\ n" est le caractère de saut de ligne. Cela signifie mettre fin à la ligne actuelle et passer à une nouvelle ligne pour quiconque la lit.

vpit3833
la source
3

Le retour du chariot et le saut de ligne sont également des références aux machines à écrire, dans la mesure où avec une petite poussée sur la poignée sur le côté gauche du chariot (l'endroit où va le papier), le papier tournerait une petite quantité autour du cylindre, faisant avancer le documenter une ligne. Si vous aviez fini de taper une ligne et que vous vouliez passer à la suivante, vous avez poussé plus fort, à la fois en avançant une ligne et en faisant glisser le chariot complètement vers la droite, puis en recommençant à taper de gauche à droite pendant que le chariot voyageait avec chaque frappe. . Inutile de dire que le retour automatique à la ligne était le paramètre par défaut pour tous les traitements de texte de l'époque. P: D

TheLastWordSword
la source
2

Ce sont des caractères non imprimables, liés au concept de "nouvelle ligne". \ n est un saut de ligne. \ r est le retour chariot. Sur différentes plateformes, elles ont des significations différentes, par rapport à une nouvelle ligne valide. Sous Windows, une nouvelle ligne est \ r \ n. Sous linux, \ n. Sous mac, \ r.

En pratique, vous les mettez dans n'importe quelle chaîne et cela aura un effet sur l'impression de la chaîne.

Palantir
la source