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"));
Author by
apophis
Updated on January 30, 2020Comments
-
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#?