Search specific string and return whole line

36,470

Solution 1

you can use TextReader to read each line and search for it, if you find what u want, then add that line into string array

List<string> found = new List<string>();
string line;
using(StreamReader file =  new StreamReader("c:\\test.txt"))
{
   while((line = file.ReadLine()) != null)
   {
      if(line.Contains("eng"))
      {
         found.Add(line);
      }
   }
}

or you can use yield return to return enumurable

Solution 2

One line:

using System.IO;
using System.Linq;

var result = File.ReadAllLines(@"c:\temp").Select(s => s.Contains("eng"));

Or, if you want a more memory efficient solution, you can roll an extension method. You can use FileInfo, FileStream, etc. as the base handler:

public static IEnumerable<string> ReadAndFilter(this FileInfo info, Predicate<string> condition)
{
    string line;

    using (var reader = new StreamReader(info.FullName))
    {
        while ((line = reader.ReadLine()) != null)
        {
            if (condition(line))
            {
                yield return line;
            }
        }
    }
}

Usage:

var result = new FileInfo(path).ReadAndFilter(s => s.Contains("eng"));
Share:
36,470
apophis
Author by

apophis

Updated on January 30, 2020

Comments

  • apophis
    apophis over 4 years

    What I would like to do is find all instances of a string in a text file, then add the full lines containing the said string to an array.

    For example:

    eng    GB    English
    lir    LR    Liberian Creole English
    mao    NZ    Maori
    

    Searching eng, for example, must add the first two lines to the array, including of course the many more instances of 'eng' in the file.

    How can this be done, using a text file input and C#?