Возврат каретки и перевод строки ... Требуются ли оба в C #? - PullRequest
29 голосов
/ 08 марта 2011

При вставке символа новой строки в строку я обычно делал это:

str = "First line\nSecond line";

В C # это стандартная практика?Должен ли я также включить символ возврата каретки '\ r'?Есть ли разница между следующим, и если да, то чем они являются?

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

Если использование «возврата каретки» и «перевода строки» является стандартной практикой, существует ли конкретный порядок и почему?

Примечание: Я прочитал несколько других постов на SO, но не нашел ответа, специфичного для .NET / C #.

Редактировать: После тестирования небольшого приложения я не увидел никакой разницы между '\ n' и '\ n \ r' или '\ r \ n'.

Ответы [ 4 ]

66 голосов
/ 08 марта 2011

System.Environment.NewLine - это искомая константа - http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx, которая обеспечит специфическую комбинацию среды, которую большинство программ в данной ОС будут рассматривать как «следующую строку текста».

На практике большинствоинструментов текста обрабатывают все варианты, которые включают \n, как «новую строку», и вы можете просто использовать его в своем тексте "foo\nbar".Особенно, если вы пытаетесь создать строки многострочного формата, такие как $"V1 = {value1}\nV2 = {value2}\n".Если вы создаете текст с конкатенацией строк, используйте NewLine.В любом случае убедитесь, что инструменты , которые вы используете, понимают вывод так, как вам нужно, и вам может понадобиться, например, всегда использовать \r\n независимо от платформы, если ваш редактор не может правильно открывать файлы.

Обратите внимание, что WriteLine методы используют NewLine, поэтому, если вы планируете писать текст одним из этих методов, избегайте использования только \n, так как результирующий текст может содержать сочетание \r\n и просто \n, что может запутать некоторыеинструменты и определенно не выглядит аккуратно.

Исторические сведения см. Разница между \ n и \ r?

10 голосов
/ 08 марта 2011

Возврат каретки \r перемещает курсор в начало текущей строки.Новая строка \n вызывает переход к следующей строке и возможно началу следующей строки;Это зависимая от платформы часть, которую Алексей отмечает выше (в * nix системе \n дает вам как возврат каретки, так и перевод строки, в Windows это не так)

То, что вы используете, зависит от того, что выпытаюсь сделать.Если бы я хотел сделать небольшую вращающуюся вещь на консоли, я бы сделал, например, str = "|\r/\r-\r\\\r";.

1 голос
/ 16 апреля 2019

Я знаю, что это немного устарело, но любой, кто наткнулся на эту страницу, должен знать, что есть разница между \ n и \ r \ n.

\ r \ n задает конец строки в CRLF, а \ n - символ конца строки в LF. В целом, глаз очень мало отличается.

Создайте .txt из строки, а затем попробуйте открыть в блокноте (обычно это не блокнот ++), и вы заметите разницу

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

Выше используется «CRLF», а ниже показано, как будет выглядеть «только LF» (есть символ, который не виден там, где показывает LF).

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

Если концы строк необходимо исправить, а файл достаточно мал по размеру, вы можете изменить окончания строк в NotePad ++ (или вставить в слово, а затем обратно в Блокнот - хотя это приведет только к CRLF).

Это может привести к тому, что некоторые функции, которые читают эти файлы, потенциально больше не функционируют (Приведены примеры строк из данных предписания GP - Англия. Файл изменился с конца строки CRLF на конец строки LF). Это остановило выполнение задания служб SSIS и не удалось, поскольку не удалось прочитать окончания строк LF.

Источник информации о завершении строки: https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications

Надеюсь, это поможет кому-то в будущем :) CRLF = на базе Windows, LF или CF из систем на основе Unix (Linux, MacOS и т. Д.)

1 голос
/ 08 марта 2011

Это зависит от того, где вы отображаете текст. Например, на консоли или в текстовом поле достаточно \ n. На RichTextBox я думаю, что вам нужны оба.

...