web-dev-qa-db-fra.com

Ordre de retour chariot et nouveau saut de ligne

Est-il important d'avoir le bon ordre de retour chariot puis un nouveau saut de ligne? Pour les éditeurs de texte, est-ce important dans quel ordre ils apparaissent?

Par exemple au lieu de

\r\n

ce

\n\r

On dirait que Jeff a déjà écrit une très belle Article de blog sur le sujet.

34
Chad

L'ordre traditionnel, lorsque les deux caractères de contrôle sont utilisés, est le retour chariot, puis le saut de ligne.

La raison de cela remonte à l'ancien téléscripteur ASR-33.

Lorsqu'un retour chariot est émis vers un ASR-33, la tête d'impression, si elle se trouve près de la marge droite, prend plus d'un dixième de seconde pour revenir à la marge gauche, et il y a un peu de "rebond" lorsque la gauche la marge est atteinte.

Si la commande était un saut de ligne, puis un retour chariot, le premier caractère imprimé peut se produire un dixième de seconde après le retour chariot et peut donc finir par imprimer (comme un maculage) à mi-chemin de la page. Mais si le saut de ligne vient après le retour du chariot, le temps pris par le saut de ligne donne plus de temps à la tête d'impression pour terminer son voyage.

Certains systèmes (je pense à l'ancien système d'exploitation Xerox Sigma 7, par exemple) font le saut de ligne puis le retour chariot, mais ils injectent, par exemple, des caractères NULL dans le flux de données pour permettre à la tête d'impression de faire son travail.

Et, bien sûr, lorsque vous accédez à des appareils plus rapides (certains des 30 premiers téléimprimeurs CPS, par exemple), le problème s'aggrave et une stratégie plus complexe est nécessaire.

(Il y a aussi le fait que, pour la saisie par l'utilisateur, le retour chariot est fourni par l'utilisateur en appuyant sur la touche Retour, tandis que le saut de ligne doit être fourni par l'ordinateur. Pour cette raison, c'était souvent le "style" d'avoir une impression normale lignes début avec saut de ligne et fin avec retour chariot. Une invite de saisie utilisateur ne consistait alors qu'en un saut de ligne, tandis que l'entrée utilisateur se terminait par le retour chariot. Ce schéma a bien fonctionné lorsqu'il est utilisé de manière cohérente, mais bien sûr, cela ne s'est pas toujours produit.)

34
Hot Licks

Il existe trois formats de saut de ligne courants:

  • \ r\n pour le monde DOS\Windows
  • \ r pour le monde Mac pré-OSX
  • \ n pour le monde Unix et Unix

\ n\r n'est pas une norme nulle part à ma connaissance et fera probablement penser à votre éditeur qu'il a un fichier texte au format Unix, puis il affichera le caractère étrange\r sous forme de texte.

Historiquement,\r se traduit par un retour chariot (CR, ASCII code 13) qui fait référence à la machine à écrire de la vieille école, où vous pousseriez le chariot vers la gauche pour ramener le curseur au début de la ligne.\n se traduit par un saut de ligne (LF, ASCII code 10) qui déplace le caractère vers le bas d'un caractère de la page. Bien que potentiellement intéressant, cela n'a généralement pas d'importance - utilisez simplement le format de saut de ligne pour votre plate-forme actuelle.

22

Comme simple suivi du retour chariot, puis du pot de recherche de saut de ligne.

Avec NotePad il détecte quand une fin de ligne quand il trouve le caractère CR + LF. Il s'agit du format général utilisé par CP/M, MS-DOS et Win32, Source

Unix détecte une fin de ligne lorsqu'il trouve un LF.
Apple détecte une fin de ligne lorsqu'il trouve un CR.

Du point de vue Uni-Code, il existe un caractère de contrôle appelé LIGNE SUIVANTE (NEL) juste pour rendre la situation encore plus complexe.

Avec le langage de programmation C, pourquoi écrit-il le retour chariot + saut de ligne lorsque vous lui donnez un caractère de saut de ligne? par exemple

printf ("bonjour le monde\ n").

Le langage de programmation C et le système d'exploitation Unix ont redéfini le caractère de saut de ligne en tant que caractère de nouvelle ligne avec l'intention que la bibliothèque stdio convertisse le caractère de nouvelle ligne à tout ce qu'il faut pour aller au début de la ligne suivante pour cette plate-forme, par exemple, retour chariot + saut de ligne pour Win32.

Ainsi, lorsque vous écrivez le nouveau caractère de ligne (c'est-à-dire vraiment LF) en C/C++ et sous Windows ou Linux, la bibliothèque de studio déterminera le format de sortie qui devra être édité pour cette fin de ligne pour cette plate-forme.

Cela est évident avec la création d'un fichier binaire ou d'un fichier texte dans un programme C. Si vous spécifiez que vous écrivez un fichier binaire, la bibliothèque du studio laissera le format de sortie inchangé pour cette plate-forme. Ainsi, lors de l'écriture des données dans un fichier et qu'il rencontre le caractère de nouvelle ligne, il n'insérera pas les caractères dépendants de la plate-forme pour une nouvelle ligne.

Bien que j'arrive à la conclusion après tout cela.

Même si vous suivez les règles Win32 pour Carriage Return + Line Feed pour par exemple écrire ce qui suit dans un fichier en tant que fichier binaire pur.

MyText \ n MyText \ n MyText

Et vous supposez qu'il restituera comme ceci dans votre éditeur de texte.

 MyText 
 MyText 
 MyText 

La plupart des éditeurs le rendront comme ceci.

 MyText 
 MyText 
 MyText 

La confusion est principalement due à la norme C qui utilise\n un nouveau caractère de ligne pour deux significations différentes. Premièrement, en tant que nouvel indicateur de ligne pour la bibliothèque STIO à convertir au nouveau format de ligne du système d'exploitation (CR + LF sur win32, LF sur Linux et CR pour Apple). saut de ligne de valeur hexadécimale.


Bien après 10 révisions et essayer différentes approches sur Win3.1,95,98, XP, je suis arrivé à la conclusion que je n'ai pas pu trouver une application qui utilisait CR et LF indépendamment et peut utiliser une combinaison de ceux-ci dans le même document. La plupart des éditeurs de texte affichent un carré lorsqu'il frappe un seul CR ou LF. La plupart des éditeurs de texte plus intelligents changeront le format de fichier selon qu'ils trouvent un CR + LF/LF/CR pour la plate-forme appropriée .

La plupart des éditeurs, sinon tous, ne se soucient que de rendre une nouvelle ligne à l'utilisateur et basculeront entre les différents formats de fichier. Donc, si votre écrivain est un lexeur et un tokenizer de chaîne de sitôt et s'inquiète du moment de détecter une nouvelle ligne. Il est préférable que les niveaux inférieurs détectent le format de fichier (CR + LF Win32, LF Linux, CR Apple) pour incrémenter le numéro de ligne. Ou utilisez la fonctionnalité ReadLine qui en tiendra compte.

Il est pour le moins déroutant de savoir pourquoi Carriage Return + Line Feed a été adopté par IBM et Win32 comme standard pour demander à l'éditeur de texte de rendre une nouvelle ligne. Quand en fait sa redondance. Je n'ai pas pu trouver une seule application qui rendait ou utilisait Carriage Return + Line Feed indépendamment pour le nom réel qu'il suggère.

Donc, si vous êtes un étudiant à l'université, écrivez le nouvel éditeur de texte pour étonner le monde. Détectez automatiquement le format de fichier et ne vous inquiétez pas de la signification technique réelle donnée à CR + LF.

5
Chad

(Désolé pour la bosse, mais c'est le résultat principal des résultats de recherche concernant ce problème)

Dans Notepad ++, cela importe. Lorsque vous commencez par un saut de ligne \n puis retour chariot \r, votre saut de ligne se retrouvera sur la ligne suivante. La commande doit donc être: CR LF

enter image description here

5
Gerben Jacobs

Il existe de nombreux convertisseurs de nouvelle ligne.

Par exemple. celui-ci . Ils font la plupart du travail pour vous.

1
Andy W