2

ファイルに何行あるのか知りたいです。簡単な方法でそれを行うにはどうすればよいですか (つまり、ファイル全体を調べて各行を数えないようにします)。そのためのコマンドはありますか?

4

4 に答える 4

9

良い:

int lines = File.ReadAllLines(path).Length;

はかなり単純ですが、巨大なテキスト ファイルにはあま​​り効率的ではありません。TextReader過度のバッファリングを避けるために、おそらくほとんどの場合 a を使用します。

int lines = 0;
using (TextReader reader = File.OpenText(path)) {
    while (reader.ReadLine() != null) { lines++; }
}
于 2010-01-20T16:27:22.387 に答える
4

呼び出す「関数」は、基本的に同じことを行います。行ごとに移動し、改行文字の数を数えます。

何かをより「鮮明」に見せるように自分を欺きたい場合は、改行文字の数をカウントする正規表現がそのトリックを行います。

于 2010-01-20T16:28:21.547 に答える
0

いずれにせよ(Regex、FileStreamなど)何か、どこかで改行を通過する必要があります。

于 2010-01-20T16:31:27.183 に答える
0

行の長さによって異なります...通常、最も速い方法は、この単純な式を使用してこれを行うことです。ファイルの長さをバイト単位で取得し、行の長さで割ったものです。次に例を示します。

const int LINE_LENGTH = 80;
System.IO.FileInfo f = 新しい System.IO.FileInfo(パス);
int noLines = f.Length / LINE_LENGTH;

上記は、行の長さが一定の80文字幅であると仮定しています...

長さが可変の場合、ファイルを開いて各行を繰り返し、行数を追跡する以外に、それを行う方法は他にありません。

編集: 以下にコメントを投稿した後、はるかに簡単な方法に気付きました.System.Diagnostics.Process名前空間でシェルを実際に使用grep -c "$(\r?\n?|\n)"して、問題のファイルへのパスとして引数を使用して呼び出す方が簡単ではないでしょうか-これにより、より柔軟になり、あらゆるファイルに対応できます。あなたがしなければならない唯一のことは、出力を読み取り、それを正規表現して実際の行数を取得することです。たとえば、Borland C に付属の grep を使用すると、この出力が得られます。

C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt
ファイル 273.txt:
35行一致

出力と走行距離は異なる場合があります-c。grep へのコマンド スイッチは「カウント」を意味します

于 2010-01-20T16:34:33.197 に答える