因此,我尝试在文件中搜索某些特定字符串,这些字符串在list
中被屏蔽,并被称为universities
,Courses
和UGPG
我使用的是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";
}
}
答案 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";
}