579 votes

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

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

  1. Retour chariot

  2. Alimentation en ligne

  3. Alimentation en formulaires

15 votes

Que signifie "retour chariot" ? Je ne vois pas de "carriage" "returning" sur mon ordinateur portable. :s

13 votes

@JeanHominal le chariot signifie essentiellement le curseur (ou le pointeur dans les anciennes machines à écrire), et retour signifie revenir au début de cette ligne.

3 votes

Je ne vois aucun fil terminé (ni aucune vitre d'ailleurs) dans ma "fenêtre" de "terminal", et il n'y a pas non plus de "télétype" attaché à /dev/tty1. Ils sont tous devenus des métaphores.

689voto

Retour chariot signifie revenir au début de la ligne en cours sans avancer vers le bas. Le nom vient du chariot d'un imprimeur, car les moniteurs étaient rares à l'époque où le nom a été inventé. Cette expression est couramment utilisée comme \r , en abrégé CR et a une valeur ASCII 13 o 0x0D .

Linefeed signifie avancer vers le bas jusqu'à la ligne suivante ; cependant, il a été reconverti et renommé. Utilisé comme "nouvelle ligne", il met fin à (souvent confondues avec séparation lignes). On l'échappe généralement sous la forme \n , en abrégé LF ou NL, et a une valeur ASCII 10 o 0x0A . CRLF (mais pas CRNL) est utilisé pour la paire \r\n .

Alimentation en formulaires signifie avancer vers le bas jusqu'à la "page" suivante. Il était couramment utilisé comme séparateur de page, mais il est maintenant également utilisé comme séparateur de section. (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". Ce caractère est généralement échappé sous la forme \f , en abrégé FF et a une valeur ASCII 12 o 0x0C .


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

La différence la plus courante (et probablement la seule qui mérite que l'on s'en préoccupe) est que les lignes se terminent par CRLF sous Windows, NL sous Unix, et CR sur les anciens Macs (la situation a changé avec OS X pour être comme Unix). Notez le changement de signification de LF à NL, pour exactement le même caractère, 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 glissement sémantique. Je ne connais pas l'histoire des Macs qui utilisent CR). De nombreux éditeurs de texte peuvent lire des fichiers dans l'un de ces trois formats et les convertir entre eux, mais tous les utilitaires ne le peuvent pas.

Le saut de page est un peu plus intéressant (bien que moins couramment utilisé directement), et avec la définition habituelle du séparateur de page, il ne peut venir qu'entre les lignes (par exemple après la séquence de nouvelles lignes NL, CRLF ou CR) ou au début ou à la fin du fichier.

12 votes

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é dans Mac OS 9 et ci-dessous.

2 votes

Le caractère FF peut sembler étrange aujourd'hui (tout comme le caractère de cloche "CTRL-G"), mais il était plus pertinent à l'époque où les écrans vidéo étaient beaucoup moins courants et où les terminaux papier étaient utilisés comme écrans de données.

0 votes

N'est-ce pas le contrôle de l'alimentation \x0c ?

155voto

user3346547 Points 1507

\r est un retour chariot et déplace le curseur en arrière comme si je faisais

printf("stackoverflow\rnine")
ninekoverflow

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

\n est un caractère de nouvelle 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 le form feed, son utilisation est devenue obsolète mais il est utilisé pour donner une indentation comme

printf("stackoverflow\fnine")
stackoverflow
             nine

si je vais écrire comme

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

4 votes

Mais cet exemple ne fonctionne pas dans les langages de haut niveau !

0 votes

@IKI c'est le cas : vous pouvez au moins faire la même chose dans le shell de Linux en utilisant printf de coreutils. Ou même en utilisant echo -en qui est un buildin de bash.

0 votes

Comment passer toutes les lignes comme une seule ligne dans un fichier ?

33voto

tanascius Points 22712

Jetez un coup d'œil à Wikipedia :

Les systèmes basés sur l'ASCII ou un jeu de caractères compatible utilisent soit LF (Line feed, '), soit LF (Line feed, '). \n ', 0x0A, 10 en décimal) ou CR (Carriage return, ' \r ', 0x0D, 13 en décimal) individuellement, 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 de chariot indique que le chariot de l'imprimante doit revenir au début de la ligne en cours.

33voto

Ritik Kamboj Points 482

En bref :

Retour de chariot( \r o 0xD ) : Prendre le contrôle à démarrage de même ligne .

Line_Feed( \n o 0xA ) : Prendre le contrôle à démarrage de ligne suivante .

form_feed( \f o 0xC ) : Prendre le contrôle à démarrage de page suivante .

6 votes

Une réponse succincte comme celle-ci devrait être encouragée.

0 votes

Les réponses succinctes ne sont élégantes que dans quelques domaines, comme les mathématiques. Windows utilise à la fois 0x0A 0x0D et ce sont des choix qui ont été faits de manière arbitraire. Les concepts ne sont pas autonomes, donc les réponses succinctes ne conviennent pas dans ces situations.

0 votes

@user5280911 oui, bien que présenter plus de détails après l'explication puisse aussi être utile, surtout dans un cas comme celui-ci où il y a d'autres détails à prendre en compte.

26voto

Balram Dixit Points 51

\f est utilisé pour le saut de page. Vous ne pouvez pas voir d'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 quand vous compilez ceci, cela génère un exe (par ex. abc.exe )

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

abc > xyz.doc

puis ouvrir le fichier xyz.doc vous pouvez voir le saut de page actuel entre hellooo et hiiii....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X