Подтвердить что ты не робот

Возврат каретки и подача линии... Требуются ли оба в С#?

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

str = "First line\nSecond line";

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

/R/n задает конец строки в CRLF, а /n - символ конца строки в LF. В целом разница между глазами очень мала.

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

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 и т.д.)