2013-02-27 2 views
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)); 
       } 
      } 
     } 
+0

, если вы получили, что далеко, следующий шаг не должен быть сложным. –

+0

Я знаю, мне просто интересно, где искать. Я хочу выполнить поиск через «lineArray», но за пределами цикла while я не могу сделать это за пределами –

+0

делать контрольные точки, это происходит, когда вы копируете код вставки. –

ответ

2

Вы можете использовать класс File, чтобы сделать вещи немного проще.

Чтобы прочитать все строки из текстового файла, который вы можете использовать File.ReadAllLines

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

Если вы хотите, чтобы найти все строки, содержащие слово или Sentance вы можете использовать Linq

// get array of lines that contain certain text. 
string[] results = lines.Where(line => line.Contains("text I am looking for")).ToArray(); 
+0

Обратите внимание, что если вы используете Linq, вы можете использовать 'File.ReadLines()', чтобы избежать хранения всего файла в памяти: 'string [] results = File.ReadLines (имя файла) .Where (line => line.Contains («текст, который я ищу»)). ToArray(); ' –

+0

Нет. Я сделал что-нибудь с LINQ. Все, что я хочу знать, - это то, где искать теперь, когда я могу отображать все содержимое текстового файла. –

0

Вопрос: Я просто хочу знать, должен ли я делать это внутри цикла while или где-то еще?
Если вы не хотите (и не должны) хранить все содержимое файла в памяти - внутри цикла while. В противном случае вы можете скопировать каждую строку в цикле в то время как для List или array и искать в них где-то еще (опять же, с большими файлами, это очень ресурс жадный подход и не рекомендуется)

Личная примечание:
ваш код выглядит странно (особенно второй цикл while - он никогда не будет выполнен, так как файл уже прочитан, вам нужно сбросить reader, если вы хотите снова прочитать файл). Первый while цикл делает ничего, кроме ПОЛЕЗНЫЕ писать утешать ...

Если это реальный код, который Вы должны действительно рассмотреть вопрос о пересмотре его и реализации предложения Мэтью Уотсона с LINQ

+0

спасибо. ваше предложение исправило проблему, которую я имел. И я исправил мой цикл ... –

+0

приветствуются. Не забывайте повышать и/или отмечать как ответ полезные комментарии по вашим вопросам (у вас есть 4 вопроса до сих пор с ценными ответами, но никто не был принят) [Как спросить] (http://stackoverflow.com/faq#howtoask) статья будет предоставить вам больше информации – Nogard

Смежные вопросы