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 循环中的每一行复制到Listorarray并在其中搜索其他地方(同样,对于大文件,这是非常资源贪婪的方法,不推荐)

个人注意:
您的代码看起来很奇怪(尤其是第二个while循环 - 它永远不会执行,因为文件已被读取,reader如果您想再次读取文件,则需要重置)。while除了写入控制台之外, 第一个循环没有做任何有用的事情......

如果这是真正的代码,你真的应该考虑修改它并使用 LINQ 实现 Matthew Watson 的建议

于 2013-02-27T09:33:19.060 回答