2015-08-07 3 views
1

У меня есть небольшой текстовый файл, содержащий три строки текста. Я пытаюсь создать программу на C#, которая получает слово от пользователя и ищет это слово в txt-файле. Если слово найдено, я хочу записать и показать, какие строки файла txt на нем было найдено. Переменная int position записывает, если слово найдено или нет, но я не могу понять, как записать, какие строки содержит слово. Как мне это сделать? Вот мой код:Поиск слова в текстовом файле в C#

class Program { 
    static void Main(string[] args) { 
     Console.Write("please enter a file to search for"); 
     string fileResponse = Console.ReadLine(); 
     Console.Write("please enter a word to search for in the file"); 
     string wordResponse = Console.ReadLine(); 
     StreamReader myfile = File.OpenText(fileResponse); 
     string line = myfile.ReadLine(); 
     int position = line.IndexOf(wordResponse); 
     int count = 0; //counts the number of times wordResponse is found. 
     int lineNunmber = 0; 

      while (line != null) { 
       if (position != -1) { 
        count++; 
       } 
       line = myfile.ReadLine(); 
      } 
     if (count == 0) { 
      Console.WriteLine("your word was not found!"); 
     } else { 
      Console.WriteLine("Your word was found " + count + " times!" + position); 
     } 
     Console.ReadLine(); 
    } 
} 
+0

и что вопрос? – Backs

+0

Ваш алгоритм специально подсчитывает количество строк, на которых оно найдено, а не количество экземпляров. Слово может отображаться 54 раза в одной строке и только один раз обнаруживать метод IndexOf(). Также вам нужно обновлять позицию каждый раз, когда вы проходите цикл while – Steve

+0

Hi Steve, поэтому переменная int position подсчитывает количество строк, на которых находится слово? – Gabe

ответ

0

Это похоже на задачу в выполнении домашних заданий, так что я только собираюсь дать вам несколько советов:

  1. Каждый раз, когда вы называете «myfile.ReadLine()», вы переместились в следующую строку файла. Вы можете отслеживать, сколько строк вы прочитали.

  2. Для записи списка значений вы можете использовать переменную List<Type>.

    Пример:

    // Create the list 
    List<int> myListOfIntegers = new List<int>(); 
    
    // Add some values 
    myListOfIntegers.Add(2); 
    myListOfIntegers.Add(5); 
    myListOfIntegers.Add(3); 
    
    // Iterate through the list 
    foreach(int item in myListOfIntegers) 
    { 
        Console.WriteLine("Item Value: " + item); 
    } 
    

    Результат:

    Item Value: 2 
    Item Value: 5 
    Item Value: 3 
    
+0

Добавить должен быть заглавный – dman2306

+0

@ dman2306 Спасибо, я слишком привык работать с C++ STL –

+0

Привет, спасибо за советы здесь. Когда я помещаю lineNumber в мой цикл while для отслеживания строк, он говорит, что в этом контексте не существует строки строки. Не уверен, что там происходит. – Gabe

2

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

(Кроме того, вы не закрываете файл, который вы Opening)

using (StreamReader myFile = File.OpenText(fileResponse)) 
{ 
    int count = 0; //counts the number of times wordResponse is found. 
    int lineNumber = 0; 
    while(!myFile.EndOfStream) 
    { 
     string line = myFile.ReadLine(); 
     lineNumber++; 
     int position = line.IndexOf(wordResponse); 
     if (position != -1) { 
      count++; 
      Console.WriteLine("Match #{0} {1}:{2}", count, lineNumber, line) 
     } 
} 

if (count == 0) { 
    Console.WriteLine("your word was not found!"); 
} else { 
    Console.WriteLine("Your word was found " + count + " times!"); 
} 
Console.ReadLine(); 

редактировать: написание

+0

Привет, Фай, я заявил, используя System.IO; в верхней части моей заявки. Где бы я поместил использование (StreamReader myfile = File.OpenText (fileResponse))? Если я помещаю его в верхнюю часть файла, то myfile не существует в текущем контексте. – Gabe

+0

мой код начинается с вашей строки StreamReader myFile и заменяет остальные. «using» - это конструкция C#, которая закрывает файл при выходе из закрывающей фигурной скобки. – Fai

+0

Хорошо, если я использую ваш код, начиная с моей строки myFile, тогда он говорит, что myFile и lineNumber не существуют в текущем контексте. – Gabe

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