4

重複の可能性:
行をすばやくカウントするには?

行ごとにデータを含むファイルがいくつかあります。

ファイルの行数を取得して、進行状況をユーザーに表示したいと考えています。(これらのファイルは、バックグラウンド読み取りで 1 行ずつ処理します)

ファイルを完全に読み取ることでこれを行うことができますが、これらのファイルが非常に大きいため、アプリケーションが RAM スペースを不必要に消費します。

そのため、ファイル全体を読み取らずにファイルの行数を取得したいと考えています。

これどうやってするの?

4

5 に答える 5

7
  1. ファイルのサイズ (バイト単位) を読み取ります。これは、o/s によって通知されます。
  2. 最初の 1000 行を読み取ります (そしてそれらを処理します)。
  3. 平均線サイズを計算します。
  4. この平均サイズをファイル サイズに割ります。
  5. これで、ファイル内の行数の見積もりが得られました。これは、プログレス バー表示のようなものに十分な精度です。
  6. これが十分に正確でない場合は、ファイルを読みながら時々再計算してください。
于 2012-12-17T13:10:23.043 に答える
6

明らかにできません。行数を取得する唯一の方法は、ファイル内の改行文字を数えることであり、そのためにファイルを読み取る必要があります。

私はこれをファイルの読み取りで完全に行うことができます。しかし、これらのファイルはとても大きいです。したがって、私のアプリケーションは不必要にRAMを消費します。

ファイルを部分的に読み取り(すべての部分がメモリに収まるように十分に小さいように)、すべての小さな部分からの行数を累積することができます。

于 2012-12-17T13:07:49.403 に答える
5
var lineCount = File.ReadLines(@"C:\file.txt").Count();
于 2012-12-17T13:08:10.527 に答える
0

もう 1 つの可能性ですが、これは、データ ファイルを生成するアプリケーションの開発も担当している場合にのみ適用され、2 つのファイルを作成することです。1 つはデータを含み、もう 1 つはデータ ファイルの行数のみを含みます。次に、データ ファイルを処理する準備ができたら、処理アプリケーションは行カウント ファイルから行カウントを読み取り、データ ファイルの処理を開始できます。

データ生成アプリケーションにアクセスできない場合は、この回答は問題に当てはまらないため無視してください。

于 2012-12-17T14:09:28.777 に答える
0

テキスト ファイルの行数を正確に数えることはできませんが (ただし、最初のn行に基づいて推測できます) 、メモリに読み込まずに (一度にファイル全体を読み取る必要はありません。たとえばReadLine、それは多くのRAMを消費しません)。同様の質問もご覧ください

long count = 0;
using (StreamReader r = new StreamReader(f))
{
    string line;
    while ((line = r.ReadLine()) != null)
    {
        count++;
    }
}

return count;
于 2012-12-17T13:11:46.340 に答える