0

.txt ファイルの正確な位置に文字列があるかどうかを知る必要があります。Contains メソッドを使用して具体的な文字列を見つける方法は知っていますが、ファイル全体を検索する必要がないため (文字列は常に同じ場所にあります)、最も迅速な解決策を見つけようとしています。

if (searchedText.Contains(item))
{
   Console.WriteLine("Found {0}",item);
   break;
}

ありがとう

4

2 に答える 2

2

UTF-8 であり、ASCII であることが保証されていない場合は、関連する文字数を読み取る必要があります。何かのようなもの:

 using (var reader = File.OpenText("test.txt"))
 {
     char[] buffer = new char[16 * 1024];
     int charsLeft = location;
     while (charsLeft > 0)
     {
         int charsRead = reader.Read(buffer, 0, Math.Min(buffer.Length,
                                                         charsLeft));
         if (charsRead <= 0)
         {
             throw new IOException("Incomplete data"); // Or whatever
         }
         charsLeft -= charsRead;
     }
     string line = reader.ReadLine();
     bool found = line.StartsWith(targetText);
     ...
 }

ノート:

  • これは、ターゲット位置から始まる完全な行を読み取るという点で非効率的です。これは、正しいデータが読み取られるようにループするよりも簡単ですが、非常に長い行を含むファイルがある場合は、これを微調整することをお勧めします。
  • このコードは、BMP (Basic Multilingual Plane) にない文字には対応していません。これらは 2 つの UTF-16 コード単位として読み取られるため、2 文字としてカウントされます。これがあなたに影響を与える可能性は低いです。
于 2012-12-04T07:18:19.603 に答える
1
if(searchedText.SubString(i, l).Contains(item))

i開始インデックスで、l 検索する文字列の長さです。
含むを使用しているため、 にいくらかの余裕がありlます。

于 2012-12-04T07:09:59.493 に答える