使用foreach循环在文本文件中搜索字符串

时间:2016-04-11 21:04:43

标签: c# streamreader

因此,我尝试在文件中搜索某些特定字符串,这些字符串在list中被屏蔽,并被称为universitiesCoursesUGPG我使用的是Streamreader加载文件。

我遇到的问题是,在第一个foreach循环执行剩余的搜索之后,我想要完成返回N/a,就像文本文件中不存在字符串一样。但是我知道它们在文本文件中。

是否有理由对此进行编码或更好的方法?

我的代码如下。

任何帮助将不胜感激。

validdirectory = new DirectoryInfo(path);
Vfiles = validdirectory.GetFiles("*.txt");
foreach (FileInfo file in Vfiles)
{
    //reads the file contents
    bool Stepout = false;
    bool nextouterloop = false;
    using (StreamReader ReadMessage = new StreamReader(file.FullName))
    {
        String MessageContents = ReadMessage.ReadToEnd();
        Message_Viewer.Text = MessageContents;
        foreach (string Uni_Name in Universities)
        {
            if (MessageContents.Contains(Uni_Name))
            {
                Display_Uni.Text = Uni_Name;
            }
        }

        foreach (string course in Courses)
        {
            if (MessageContents.Contains(course))
            {
                Display_Course.Text = course;
            }
            Display_Course.Text = "N/A";
        }

        if (MessageContents.Contains("Postgraduate"))
        {
            Display_UGPG.Text = "Postgraduate";
        }
        else if (MessageContents.Contains("Undergraduate"))
        {
            Display_UGPG.Text = "Undergraduate";
        }
        Display_UGPG.Text = "N/A";
    }
}

2 个答案:

答案 0 :(得分:6)

在循环内移除N / A的分配,让它一直运行直到完成 最后,您可以测试文本框的内容,看看您的循环是否找到了某些内容,如果没有,则设置N / A文本

    foreach (string course in Courses)
    {
        if (MessageContents.Contains(course))
            Display_Course.Text = course;
    }
    if (MessageContents.Contains("Postgraduate"))
        Display_UGPG.Text = "Postgraduate";
    else if (MessageContents.Contains("Undergraduate"))
        Display_UGPG.Text = "Undergraduate";

    if(string.IsNullOrWhitespace(Display_Course.Text))
        Display_Course.Text = "N/A";

    if(string.IsNullOrWhitespace(Display_UGPG.Text ))
        Display_UGPG.Text  = "N/A";

顺便说一句,让你使用大学和课程的数组或列表,我想你想看到所有匹配的名字。实际上,您的代码始终写入最后一个课程,并且在文本框中找到的大学会覆盖之前找到的名称 您应该通过调用AppendText来更改设置Text属性的行(如果文本框是multiline = true,也可以添加换行符)

....
Display_Uni.AppendText(Uni_Name + Environment.NewLine);
...
Display_Course.AppendText(course + Environment.NewLine);

答案 1 :(得分:0)

这是一个没有复杂的foreach循环的可能解决方案:

        if (Universities.Select(p => MessageContents.Contains(p)).Any())
        {
            Display_Uni.Text = Uni_Name;
        }
        else if (Courses.Select(p => MessageContents.Contains(p)).Any())
        {
            Display_Course.Text = course;
        }
        else if (MessageContents.Contains("Postgraduate"))
        {
            Display_UGPG.Text = "Postgraduate";
        }
        else if (MessageContents.Contains("Undergraduate"))
        {
            Display_UGPG.Text = "Undergraduate";
        }
        else
        {
            Display_UGPG.Text = "N/A";
        }