私はC#を初めて使っています。 私はいくつかのディレクトリの下でコードファイルの束を開き、いくつかの一致する文字列を含む特定の行を取得する必要があります。 それは単純な問題です、私はストリームリーダーを使用してファイルを1つずつ開いて、1行ずつ解析することができます。 私は同じことをするより効率的な方法があるのだろうかと思っていた。私は、ストリームリーダとラインごとの読取りが重い操作であるという印象を受けているようです。C#ファイルの内容を読み込んで文字列を見つける
答えて
ファイルの内容全体を調べる必要がある場合は、すべての行を読み込む必要があります。 ReadLine()
は、それと同じように良い方法です。
あなたはあなたのファイルの各行を含む配列を与える()StreamReader.ReadToEnd()
File.ReadAllLinesを使用して、一度にファイル全体の内容を読み取ることができます。あなたがファイルの途中で読書を停止することができる場合、これはもっとうまくいくかもしれません。もしそうでなければ、それはあなたにIOで時間を節約するかもしれません(個々のIO呼び出しが少なくなりますが、これは単なる推測です)。
本当に心配な方は、プロファイラを使用するか、ベンチマークを作成してください。それ以外の場合は、読みやすい方法を使用してください。
ReadToEnd()メソッドは実際にはLoC(コード行)の点で効率的ですが、パフォーマンスが懸念される場合は基本的にファイルの内容全体をメモリにロードするので注意が必要です(文字列)。ファイルサイズが非常に大きい場合は、間違いなくパフォーマンスにヒットします。
すでにファイルの行を取得する方法については、いくつかの良い記事がありますので、私は効率について少しは追加すると思っていました。いくつかの人がFile.ReadAllLines()メソッドについて言及しています。この方法は、ファイル全体を一度にメモリに読み込むため、効率的には問題があります。さらに、連続したメモリを必要とするストレージとしての配列を使用します。ファイルが十分に大きければ、問題が発生します。
ファイルをより効率的に読み取るには、StreamReader.ReadLineメソッドを繰り返し使用します。一度に1行ずつ返すので、気にする行はメモリ内に保存するだけで済みます。イテレータを評価する遅延にするのも比較的簡単です。
public static IEnumerable<string> ReadLinesEnumerable(string path) {
using (var reader = new StreamReader(path)) {
var line = reader.ReadLine();
while (line != null) {
yield return line;
line = reader.ReadLine();
}
}
}
LINQに関しては、 LINQを使用すると、ReadAllLinesメソッドとReadLinesEnumerableメソッドの両方を等しく一致させることができます。これは、両方とも列挙可能なデータ型を返すためです。たとえば
var query = from line in ReadLinesEnumerable(@"c:\some\path\file.txt")
where Regex.IsMatch(line, @"^(\d)+.*$")
select line;
- 1. 文字列を含むファイルを読み込んでディレクトリ内で見つける方法
- 2. Cプログラミング:ファイル文字列内の最大値を見つける
- 3. Cの文字列内の文字を見つける
- 4. C:読み込み入力文字列を読み込み、文字配列
- 5. C++で文字列を見つける
- 6. 文字列で読み込んだ後xmlファイルを読み込みます。
- 7. Rubyでファイルの内容を読み込んで処理する
- 8. .docx(Word)ファイルの内容を読み込んで置換する
- 9. パンダがファイルの内容を読み込んでソートする
- 10. C#バイナリファイル内の文字列の読み込み
- 11. C - ファイルからテキスト/文章を文字列に読み込む
- 12. ファイルを読み込んで文字列に格納する
- 13. ファイルを読み込んでPythonで文字列を返す
- 14. ファイルを文字列に読み込む
- 15. ファイルから文字列を読み込み、その文字列の最初の一致を別のファイルで見つける
- 16. ファイルから文字配列への読み込み、C
- 17. リスト内の文字列の位置を見つけるC#
- 18. 文字列内の文字列を見つける
- 19. REGEXは文字列内の文字列を見つける
- 20. 文字列内の不明な文字列を見つける
- 21. PHPは文字列としてファイルの内容を読み込んで実行します
- 22. 関数はC++でファイルの内容を読み込んで印刷しない
- 23. Perlがファイルを読み込んで2つの文字列の間に文字列を取得する
- 24. c#XMLノードを読み込んで文字列型参照
- 25. ファイルを読み込み、Fortranで配列の値のインデックスを見つけます
- 26. C++の文字配列にファイルを読み込む
- 27. ファイルの内容を読み込んで配列として保存する
- 28. ファイル内の複数の文字列を見つける - Perl
- 29. javaでファイルの内容を読み込み、パラメータをチェックする
- 30. 読み込んで文字列
これは優れた方法です。 –