Символ новой строки в c#
Я написал этот код, чтобы подсчитать количество символов в текстовом файле :
sr.BaseStream.Position = 0;
sr.DiscardBufferedData();
int Ccount = 0;
while (sr.Peek() != -1)
{
sr.Read();
Ccount++;
}
но после применения этого кода в файле содержится :
1
2
3
4
5
6
7
8
9
0
Ccount = 30 ???? почему? Я использую Windows Xp на виртуальной коробке на моем Macbook используемая программа: Microsoft Visual Basic 2010.
5 ответов
В Windows каждая новая строка состоит из двух символов \r
и \n
. У вас есть 10 строк, каждая строка имеет 1 видимый символ и 2 новых символа строки, которые добавляют до 30 символов.
если вы создали свой файл в Mac или Unix / Linux, вы бы получили другой результат (20 символов). Потому что Unix использует только \n
и Mac использует только \r
для новой линии.
вы можете использовать некоторые редакторы (например Notepad++), чтобы показать вам новые символы, или даже переключение между различными режимами (DOS / Unix / Mac).
ты читаешь по одному символу за раз, и каждая строка содержит три символа:
- цифра
- один возврат каретки (
\r
) - в одну строку (
\n
)
(Windows использует \r\n
как его последовательность новой строки. Тот факт, что вы работаете в виртуальной машине на Mac не влияет на это.)
есть более простой способ сделать это. Сделайте весь *.txt файл в строковый массив и измерить его:
int count = 0;
string[] Text = File.ReadAllLines(/*Path to the file here*/);
for (int i = 0; i < Text.Count(); i++)
{
count += Text[i].Length;
}
Windows обычно использует \r\n
для новой строки это символы ASCII 0x13 и 0x10.
предложите вам доказать это себе, сделав это:
Console.WriteLine("0x{0:x}", sr.Read());
новая строка фактически состоит из 2 отдельных символов: LF CR (подача строки и возврат каретки). Но вы бы знали это, если бы вы поставили точку останова в своем цикле. Теперь для дополнительного кредита, сколько байтов в unicode?