0

私は現在、テキスト ファイルを含む小さな C# 演習を行っています。テキスト ファイルに含まれているのは、テキスト ファイル内の新しい行ごとの文だけです。これまでのところ、テキストを読み取って文字列配列に格納することができました。次に行う必要があるのは、特定の用語を検索し、検索された単語/フレーズを含む文を書き出すことです。while ループ内で行うべきか、それとも他の場所で行うべきかを知りたいだけですか?

String filename = @"sentences.txt";


// File.OpenText allows us to read the contents of a file by establishing
// a connection to a file stream associated with the file.
StreamReader reader = File.OpenText(filename);

if (reader == null)
{
   // If we got here, we were unable to open the file.
   Console.WriteLine("reader is null");
   return;
 }

  // We can now read data from the file using ReadLine.

 Console.WriteLine();

 String line = reader.ReadLine();


  while (line != null)
  {

     Console.Write("\n{0}", line);
     // We can use String.Split to separate a line of data into fields.


     String[] lineArray = line.Split(' ');
     String sentenceStarter = lineArray[0];

     line = reader.ReadLine();


  }
  Console.Write("\n\nEnter a term to search and display all sentences containing it: ");
        string searchTerm = Console.ReadLine();

        String searchingLine = reader.ReadLine();


        while (searchingLine != null)
        {


            String[] lineArray = line.Split(' ');
            String name = lineArray[0];



            line = reader.ReadLine();
            for (int i = 0; i < lineArray.Length; i++)
            {
                if (searchTerm == lineArray[0] || searchTerm == lineArray[i])
                {
                    Console.Write("\n{0}", searchingLine.Contains(searchTerm));
                }
            }
        }
4

2 に答える 2

2

クラスを使用しFileて、物事を少し簡単にすることができます。

テキストファイルからすべての行を読み取るには、使用できますFile.ReadAllLines

string[] lines = File.ReadAllLines("myTextFile.txt");

単語または文を含むすべての行を見つけたい場合は、使用できますLinq

// get array of lines that contain certain text.
string[] results = lines.Where(line => line.Contains("text I am looking for")).ToArray();
于 2013-02-27T07:02:47.230 に答える
0

質問: while ループ内で行うべきか、それとも別の場所で行うべきかを知りたいだけですか?
回答:すべてのファイル コンテンツをメモリに保存したくない (そしてすべきではない) 場合は、while ループ内で行います。それ以外の場合は、while ループ内のすべての行をListorにコピーしてarray、その中を別の場所で検索できます (大きなファイルでは、これは非常にリソース欲の強いアプローチであり、お勧めできません)。

個人的な注意:
あなたのコードは奇妙に見えます (特に 2 番目のwhileループ - ファイルが既に読み取られているため実行されませんreader。ファイルを再度読み取りたい場合はリセットする必要があります)。最初whileのループは、コンソールへの書き込み以外は何も役に立ちません...

これが実際のコードである場合は、実際にコードを修正し、マシュー ワトソンの提案を LINQ で実装することを検討する必要があります。

于 2013-02-27T09:33:19.060 に答える