2013-04-15 5 views
9

я писал этот код, чтобы подсчитать количество символов в текстовом файле:символ новой строки в 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.

+4

Символ + возврат + новая строка = 3 символа в строке = 3 * 10 = 30 в общей сложности. –

+0

10 символов + 10 возвратов каретки + 10 строк питания? '? \ r \ n' –

+0

Environment.NewLine должен соответствовать символу новой строки в любой ОС. –

ответ

14

В Windows каждая новая строка состоит из двух символов \r10 и \n. У вас есть 10 строк, каждая строка имеет 1 видимый символ и 2 новых строчных символа, которые содержат до 30 символов.

Если вы создали свой файл в Mac или Unix/Linux, у вас получился бы другой результат (20 символов). Поскольку Unix использует только \n, а Mac использует только \r для новой строки.

Вы можете использовать некоторые редакторы (например, Notepad ++), чтобы показывать вам новые строковые символы или даже переключаться между различными режимами (DOS/Unix/Mac).

+0

Спасибо, господин Сина – ammarx

13

Вы читаете один символ за один раз, и каждая строка содержит три символа:

  • один значный
  • один возврат каретки (\r)
  • один символ новой строки (\n)

(Windows использует \r\n в качестве последовательности новой строки. Тот факт, что вы работаете в виртуальной машине на Mac, не влияет на это.)

2

Новая строка фактически представляет собой два отдельных символа: LF CR (подача линии и возврат каретки). Но вы бы знали, что если вы поместите контрольную точку в свой цикл. Теперь для дополнительного кредита, сколько байтов в юникоде?

2

Windows обычно использует \r\n для новой строки, то есть символы ASCII 0x13 и 0x10.

Предлагаем Вам доказать это себе, как это сделать:

Console.WriteLine("0x{0:x}", sr.Read()); 
3

Там более простой способ сделать это. Сделайте весь файл * .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; 
} 
Смежные вопросы