2013-07-24 9 views
5

改行で区切られたデータ行を持つテキストファイルがあります。私がやろうとしているのは、改行だけのものを除いて、ファイル内の行数を数えることです。改行文字のみと一致

私は正規表現を使って各行を読み込んだのですが、行頭に改行文字が含まれていない場合はそれを表示することはできません。私は結果を出さずにこれをどうやって行うのか、全面的に調査しました。

ここで私はこれをしようとするために書いた方法です:

public int LineCounter() 
{ 
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt"); 
    int lineCount = 0; 
    string line; 

    while ((line = myRead.ReadLine()) != null) 
    { 
     string regexExpression = @"^\r?\n"; 
     RegexOptions myOptions = RegexOptions.Multiline; 
     Match stringMatch = Regex.Match(line, regexExpression, myOptions); 
     if (stringMatch.Success) 
     { 
     } 
     else 
     { 
      lineCount++; 
     } 
    } 
    return lineCount; 
} 

私はSinglelineMultiline間RegexOptionsを変更しようとしましたが、私は私のパターンマッチに"\r|\n|\r\n"を入れて試してみたが、私は」 veは式から^を削除しようとしましたが、動作させることができません。私が何をするにしても、私のlineCountは常に、改行を含めてファイル内の行の総数になってしまいます。

私は明らかに何かを見落としていますが、何が間違っているかを知るにはまだC#言語に慣れていません。それは私にはうまくいくように見える。誰かが私を助けてくれますか?

private static int LineCounter(string filePath) 
{ 
    string[] lines = File.ReadAllLines(filePath); 
    return lines.Length; 
} 
+0

をカウントしたい場合 あなたはString.IsNullOrEmpty(r)に変更することができます@「^ $ \ rは?\ nは?」' –

+0

を私は別のアプローチの@newStackExchangeInstanceで行くことにしましたが、これは私の正規表現を修正しました。ありがとう:) – CurtisFreak

答えて

1

は、この(削除正規表現)のような何かをするためにあなたのコードを少し変更してみてください:

while ((line = myRead.ReadLine()) != null) 
{ 
    if (line.Length == 0) 
    { 
     lineCount++; 
    } 
} 

oakioは私のアイデアを与えました。 Readline関数は、返される行から\ n文字を削除します。したがって、空でない空の文字列が表示されている場合は、探しているものが実際に表示されます。また、StreamReaderをusingステートメントでラップして、何か致命的な事態が発生した場合にファイルが確実に閉じられるようにしたいとします。

注:このコードでは、スペースだけを含む行もカウントされます。あなたの説明から、これがあなたの望むものであるように聞こえました。

public int LineCounter() 
    { 
     using (StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt")) 
     { 
      int lineCount = 0; 
      string line; 

      while ((line = myRead.ReadLine()) != null) 
      { 
       if (line.Count() != 0) 
       { 
        lineCount++; 
       } 
      } 
     } 

     return lineCount; 
    } 
+0

Aha!これはまさに私が探していたものです。大変ありがとう! – CurtisFreak

1

最も簡単な方法は、ファイルの行数を数えます。行が空の場合、ReadLine()は空の文字列を返します。

lineCount = File.ReadAllLines(filePath).Count((line) => line.Length > 0); 
+0

これは良いですが、空白行であるものを除外する必要があります。 – gunr2171

+0

残念ながら、これは改行を削除しません。しかし、ありがとう! – CurtisFreak

1

​​改行キャラをストライピングされています

0

RegExを使用する必要はありません。行が空であるかどうかをチェックするだけです。その1つのラインカウンタにする

public int LineCounter() 
{ 
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt"); 
    int lineCount = 0; 

    while (!myRead.EndOfStream) 
    { 
     string line = myRead.ReadLine(); 
     if (!string.IsNullOrWhiteSpace(line)) 
     lineCount++; 
    } 

    myRead.Close(); 

    return lineCount; 
} 
4

使用LINQ:

private int count(string filePath) 
{ 
    string[] lines = File.ReadAllLines(filePath); 
    return lines.Count(r => !String.IsNullOrWhiteSpace(r)); 
} 

これはまた、それらに空白を持つ行を除外します。あなたがしよう `whitespacedライン

+0

File.ReadLinesはおそらくより高速です。 –

+0

これは、スペースだけを含む行を数えないという問題があります。彼はこれらを数えたいと思うという彼の記述のように聞こえる。 –

+0

ありがとう、私の編集を見てください。 :) – Liel

関連する問題