2012-04-12 13 views
0

こんにちは、私はファイルを通ってgrepしようとしています。行数、行あたりの最大スペース数、最長行数です。ファイルから読み込まれたcharが "/ n"であるかどうかをチェックする方法は?

どのように私は "/ n"文字を判断することができますか?char trough与えられたファイルによってcharを繰り返しますか?

ありがとうございます。

using (StreamReader sr = new StreamReader(p_FileName)) 
    { 

    char currentChar; 
    int current_length=0,current_MaximumSpaces=0; 
    p_LongestLine=0; 
    p_NumOfLines=0; 
    p_MaximumSpaces=0; 
    while (!sr.EndOfStream){ 
     currentChar=Convert.ToChar(sr.Read()); 
     current_length++; 
     if(Char.IsWhiteSpace(currentChar) || currentChar==null){ 
      current_MaximumSpaces++; 
     } 
     if(currentChar == '\n'){ 
      p_NumOfLines++; 
     } 
     if(current_length>p_LongestLine){ 
      p_LongestLine=current_length; 
     } 
     if(current_MaximumSpaces>p_MaximumSpaces){ 
      p_MaximumSpaces=current_MaximumSpaces; 
     } 
     current_length=0; 
     current_MaximumSpaces=0; 
    } 
    sr.Close(); 
} 
+2

スラッシュは逆になり、二重引用符の代わりに一重引用符が必要です:) – dasblinkenlight

+1

現在どのようにしようとしているかのコードを入力してください。 –

答えて

2

文字単位で移動する必要はありません。目的に合わせて行単位で行えば十分です。システムに依存する行区切りを処理するために.NETを追加ボーナスとして追加します。

int maxLen = -1, maxSpaces = -1; 
foreach (var line in File.ReadLines("c:\\data\\myfile.txt")) { 
    maxLen = Math.Max(maxLen, line.Length); 
    maxSpaces = Math.Max(maxSpaces, line.Count(c => c == ' ')); 
} 

EDIT:あなたのプログラムがあるため、あなたがチェックとは関係のないエラーで動作しません'\n':あなたは改行文字を見たときにのみ、あなたは、各文字の後にcurrent_lengthcurrent_MaximumSpacesをゼロ、代わりにそれらをクリアしています。

+0

ありがとう、私はこれを試してみましょう! – AlexBerd

+0

正確です。 'current_length'は、改行が見つかるブランチでゼロにされるべきです。そして、私はcharを 'null'と比較するのが好きではありませんが、それは私だけかもしれません。 –

5
if(currentChar == '\n') 
    count++; 
+0

私はこれを使用しました...うまくいきません! 空白文字を確認するような方法はありません。char.IsSpace() – AlexBerd

+0

"うまくいかない"何が正確にそれで動作しないのですか? – Oded

+0

@AlexanderBerdichevsky:フォワードスラッシュの代わりにバックスラッシュを使用しましたか? –

0

私はあなたが実際に\r\n(非UNIX)で改行することを推測し、終了していEnvironment.NewLine

bool is_newline = currentChar.ToString().Equals(Environment.NewLine); 

と比較してみてください。ここでは

が、私はこのために使用される私のコードです。以前の/現在の文字を追跡し、\r\nまたはEnvironment.NewLineのいずれかを探す必要があります。

+0

'Environment.NewLine'は2文字からなる文字列なので、1文字と決して一致しません。 –

+1

@ MrLister - それはプラットフォームに依存していることは分かりますか? – SwDevMan81

+0

それを使用しない理由はさらにあります! –

関連する問題