0

多くの行を含むファイルがあり、ストリームリーダーを使用してファイルを読み取っています。私がする必要があるのは、このファイルにある行数を数えることですが、特定の時点で、ファイルには「-----」のようなテキストの行が含まれています。だから私がする必要があるのは、「-----」を含む行を除いたファイルの行数を数えることです。

私はこのようなstreamreaderを使いたくありません:

StreamReader reader = new StreamReader();
var x = reader.ReadLine()

xに「-----」が含まれているかどうか、およびカウンターがインクリメントされるかどうかを確認します。これは、ファイルが巨大なファイルになるため、非常に集中的に行われるためです。

どんな助けでも大歓迎です。

前もって感謝します。

4

2 に答える 2

1

試す

File.ReadLines("path").Count (l => !l.Contains("-----"));

ReadLinesはIEnumerableを返します。Linqの遅延評価により、行数をカウントするためにファイル全体がメモリに読み込まれることはありません。

使用する

File.ReadAllLines(...) 

これは、私が最初に私の答えで誤って使用したものであり、ファイル全体をメモリに読み込みます

于 2012-04-18T10:42:55.817 に答える
1

私は使うだろう:

var count = File.ReadLines("foo.txt")
                .Count(line => !line.Contains("-----"));

File.ReadLines読み取りはストリーミング方式で行われるため、実際には一度に1つしか読み取られないことに注意してください。

しかし、それはあなたがやりたくないとあなたが説明したことを効果的に行います...かなりきれいな方法で。あなたはそれが「非常に集中的」だと言いますが、これは本質的な仕事です。特定のパターンを含む行数を数えようとしている場合は、明らか各行を読む必要があります。それが避けられるとあなたがどう思うかわかりません。

于 2012-04-18T10:43:17.993 に答える