web-dev-qa-db-fra.com

Retour chariot et saut de ligne ... Les deux sont-ils requis en C #?

Lors de l'insertion d'un nouveau caractère de ligne dans une chaîne, j'ai généralement fait ceci:

str = "First line\nSecond line";

En C #, est-ce la pratique standard? Dois-je également inclure le caractère "retour chariot" "\ r"? Y a-t-il une différence entre les éléments suivants, et si oui, quels sont-ils?

str = "First line\nSecond line";
str = "First line\r\nSecond line";

Si l'utilisation à la fois du "retour chariot" et du "saut de ligne" est une pratique courante, existe-t-il un ordre spécifique et pourquoi?

Note: J'ai lu quelques autres articles sur SO mais je n'ai pas trouvé de réponse spécifique à .NET/C #.

Edit: Après avoir testé une petite application, je n'ai vu aucune différence entre '\ n' et '\ n\r' ou '\ r\n'.

29
Luke Baulch

System.Environment.NewLine est la constante que vous recherchez - http://msdn.Microsoft.com/en-us/library/system.environment.newline.aspx qui fournira une combinaison spécifique à l'environnement que la plupart des programmes utilisent l'OS donné considérera la "prochaine ligne de texte".

En pratique, la plupart des outils de texte traitent toutes les variantes qui incluent \n comme "nouvelle ligne" et vous pouvez simplement l'utiliser dans votre texte "foo\nbar". Surtout si vous essayez de construire des chaînes de format multi-lignes comme $"V1 = {value1}\nV2 = {value2}\n". Si vous créez du texte avec une concaténation de chaînes, pensez à utiliser NewLine. Dans tous les cas, assurez-vous que les outils que vous utilisez comprenez la sortie comme vous le souhaitez et vous devrez peut-être, par exemple, toujours utiliser \r\n quelle que soit la plate-forme si l'éditeur de votre choix ne peut pas ouvrir correctement les fichiers sinon.

Notez que les méthodes WriteLine utilisent NewLine donc si vous prévoyez d'écrire du texte avec une de ces méthodes, évitez d'utiliser simplement \n car le texte résultant peut contenir un mélange de \r\n et juste \n ce qui peut perturber certains outils et ne semble certainement pas soigné.

Pour l'historique, voir Différence entre\n et\r?

66
Alexei Levenkov

Cela dépend de l'endroit où vous affichez le texte. Sur la console ou une zone de texte par exemple,\n suffira. Sur une RichTextBox, je pense que vous avez besoin des deux.

1
kprobst

Je sais que c'est un peu vieux, mais pour quiconque tombe sur cette page devrait savoir qu'il y a une différence entre\n et\r\n.

Le\r\n donne une fin de ligne CRLF et le\n donne un caractère de fin de ligne LF. Il y a très peu de différence pour l'œil en général.

Créez un .txt à partir de la chaîne, puis essayez de l'ouvrir dans le bloc-notes (normal pas notepad ++) et vous remarquerez la différence

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIOD
Q44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901
Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

Ce qui précède utilise 'CRLF' et ce qui suit est à quoi ressemblerait 'LF seulement' (Il y a un caractère qui ne peut pas être vu où le LF montre)).

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIODQ44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

Si les fins de ligne doivent être corrigées et que le fichier est suffisamment petit, vous pouvez modifier les fins de ligne dans NotePad ++ (ou les coller dans Word puis dans le bloc-notes - bien que cela ne fasse que CRLF).

Cela peut empêcher certaines fonctions qui lisent ces fichiers de fonctionner (les lignes d'exemple fournies proviennent de GP Prescribing data - England. Le fichier est passé d'une fin de ligne CRLF à une LF fin de ligne Cela a empêché l'exécution d'un travail SSIS et a échoué car il n'a pas pu lire les fins de ligne LF.

Source des informations de fin de ligne: https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications

J'espère que cela aidera quelqu'un à l'avenir :) CRLF = basé sur Windows, LF ou CF proviennent de systèmes basés sur Unix (Linux, MacOS, etc.)

1
Mex