2015-10-21 8 views
4

У меня возникли проблемы с поиском слов в текстовом файле на C#.Поиск определенного слова в текстовом файле и отображение строки на

Я хочу найти слово, которое вводится в консоль, а затем отобразить всю строку, что слово было найдено на в консоли.

В моем текстовом файле у меня есть:

Стивен Харена, декабрь, 9,4055551235

Лаура Клаузинг, январь, 23,4054447788

Уильям Коннор, декабрь, 13 , 123456789

Kara Marie, октябрь, 23,1593574862

Одри Carrit, январь, 16,1684527548

Себастьян Бейкер, октябрь, 23,9184569876

Так что, если я вход "Декабрь" Я хочу, чтобы отобразить «Стивен Харен, декабрь , 9,4055551235 "и" Уильям Коннор, 13 декабря 123456789 года ".

Я думал об использовании подстрок, но я подумал, что должен быть более простой способ.

Мой код После Учитывая Ответ:

using System; 
using System.IO; 
class ReadFriendRecords 
{ 
    public static void Main() 
    { 
     //the path of the file 
     FileStream inFile = new FileStream(@"H:\C#\Chapter.14\FriendInfo.txt", FileMode.Open, FileAccess.Read); 
     StreamReader reader = new StreamReader(inFile); 
     string record; 
     string input; 
     Console.Write("Enter Friend's Birth Month >> "); 
     input = Console.ReadLine(); 
     try 
     { 
      //the program reads the record and displays it on the screen 
      record = reader.ReadLine(); 
      while (record != null) 
      { 
       if (record.Contains(input)) 
       { 
        Console.WriteLine(record); 
       } 
        record = reader.ReadLine(); 
      } 
     } 
     finally 
     { 
      //after the record is done being read, the progam closes 
      reader.Close(); 
      inFile.Close(); 
     } 
     Console.ReadLine(); 
    } 
} 
+0

Как насчет [String.Contains] (https://msdn.microsoft.com/en-us/library/dy85x1sa (v = vs.110) .aspx)? –

+0

Как вы читаете текстовый файл? –

ответ

5

Итерация по всем линиям (StreamReader, File.ReadAllLines и т.д.) и проверить, если line.Contains("December") (замените "Декабрь" с пользовательского ввода).

Редактировать: Я бы пошел с StreamReader, если у вас большие файлы. И используйте IndexOf-Example из @Matias Cicero, а не для нечувствительного к регистру.

Console.Write("Keyword: "); 
var keyword = Console.ReadLine() ?? ""; 
using (var sr = new StreamReader("")) { 
    while (!sr.EndOfStream) { 
     var line = sr.ReadLine(); 
     if (String.IsNullOrEmpty(line)) continue; 
     if (line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase) >= 0) { 
      Console.WriteLine(line); 
     } 
    } 
} 
1

Как о чем-то вроде этого:

//We read all the lines from the file 
IEnumerable<string> lines = File.ReadAllLines("your_file.txt"); 

//We read the input from the user 
Console.Write("Enter the word to search: "); 
string input = Console.ReadLine().Trim(); 

//We identify the matches. If the input is empty, then we return no matches at all 
IEnumerable<string> matches = !String.IsNullOrEmpty(input) 
           ? lines.Where(line => line.IndexOf(input, StringComparison.OrdinalIgnoreCase) >= 0) 
           : Enumerable.Empty<string>(); 

//If there are matches, we output them. If there are not, we show an informative message 
Console.WriteLine(matches.Any() 
        ? String.Format("Matches:\n> {0}", String.Join("\n> ", matches)) 
        : "There were no matches"); 

Этот подход является простым и легким для чтения, он использует LINQ и String.IndexOf вместо String.Contains так что мы можем сделать поиск без учета регистра.

1

Как mantioned по @Rinecamo, попробуйте этот код:

string toSearch = Console.ReadLine().Trim(); 

В этом codeline, вы будете иметь возможность читать ввод пользователя и хранить его в строке, то итерации для каждой строки:

foreach (string line in System.IO.File.ReadAllLines(FILEPATH)) 
{ 
    if(line.Contains(toSearch)) 
     Console.WriteLine(line); 
} 

Заменить FILEPATH на абсолютный или относительный путь, например "\ File2Read.txt".

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