在文本文件中搜索特定单词并显示其中的行

时间:2015-10-21 14:07:55

标签: c# text-files

我无法在C#中查找文本文件中的单词。

我想找到输入到控制台的单词,然后在控制台中的上显示该单词的整行。

在我的文本文件中,我有:

Stephen Haren,12月,9,4055551235

Laura Clausing,1月,23,4054447788

William Connor,12月,13,123456789

Kara Marie,十月,23,1593574862

Audrey Carrit,1月16,1684527548

Sebastian Baker,10月,23,9184569876

因此,如果我输入“12月”,我希望它显示“Stephen Haren,12月,9,4055551235”和“William Connor,12月,13,123456789”。

我考虑过使用子串,但我认为必须有一种更简单的方法。

给出答案之后我的代码:

  if (rowItems.HasRows)
      {
        rowItems.Read();
              foreach(var row in rowItems)
                {

                    var a = row["sampleonly"].ToString(); // or something
                }
      }
 else
      {
            // do something
      }

4 个答案:

答案 0 :(得分:7)

遍历所有行(StreamReader,File.ReadAllLines等)并检查是否 line.Contains("December")(用用户输入替换“12月”)。

编辑: 如果您有大文件,我会使用StreamReader。并使用@Matias Cicero中的IndexOf-Example而不是包含不区分大小写的包含。

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 :(得分:2)

这样的事情怎么样:

//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");

此方法简单易读,使用LINQString.IndexOf代替String.Contains,因此我们可以进行不区分大小写的搜索。

答案 2 :(得分:2)

如@Rinecamo所述,试试这段代码:

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

在此代码行中,您将能够读取用户输入并将其存储在一行中,然后针对每一行进行迭代:

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

FILEPATH替换为绝对或相对路径,例如“\ file2Read.txt”。

答案 3 :(得分:0)

要在文件中查找文本,可以使用此算法,并在

中使用以下代码
static void Main(string[] args)
    {
    }

尝试这个

StreamReader oReader;
if (File.Exists(@"C:\TextFile.txt")) 
{
Console.WriteLine("Enter a word to search");
string cSearforSomething = Console.ReadLine().Trim();
oReader = new StreamReader(@"C:\TextFile.txt");
string cColl = oReader.ReadToEnd();
string cCriteria = @"\b"+cSearforSomething+@"\b";
System.Text.RegularExpressions.Regex oRegex = new 
System.Text.RegularExpressions.Regex(cCriteria,RegexOptions.IgnoreCase);

int count = oRegex.Matches(cColl).Count;
Console.WriteLine(count.ToString());
}
Console.ReadLine();