c#Windows窗体,根据用户输入在文件中搜索字符串,返回整行
假设我有一个.txt文件,其中包含以下内容: 软件152,软件工程,20,S1,0,0,0.3,55,0.7,65 SOFT155,沉浸式介绍,20,S1,0,0,0,0,0,1.0,92 NET103,基础设施原理,20,S2,0,0,0.5,70,0.5,80 Soft153,编程结构和算法原理,20,S2,0.4,56,0,0,0,0.6,75 ISAD 151,数据库开发,20,S1,0.4,60,0,0,0.6,92 MATH160PP,量子宇宙,20,S1,0,0,0,0,1.0,84 如何根据用户在文本框中所写内容并按下按钮(例如“查找”)在这些行中搜索特定字符串 然后返回整行并将每个变量放入文本框中(用户可以编辑任何值等),如下所示: 我已经成功地使用这段代码实现了这一点,它给出了我想要的输出,但是我不知道如何根据用户输入更改“字符串引用”:c#Windows窗体,根据用户输入在文件中搜索字符串,返回整行,c#,string,file,search,windows-forms-designer,C#,String,File,Search,Windows Forms Designer,假设我有一个.txt文件,其中包含以下内容: 软件152,软件工程,20,S1,0,0,0.3,55,0.7,65 SOFT155,沉浸式介绍,20,S1,0,0,0,0,0,1.0,92 NET103,基础设施原理,20,S2,0,0,0.5,70,0.5,80 Soft153,编程结构和算法原理,20,S2,0.4,56,0,0,0,0.6,75 ISAD 151,数据库开发,20,S1,0.4,60,0,0,0.6,92 MATH160PP,量子宇宙,20,S1,0,0,0,0,1.0,8
try
{
using (StreamReader reader = new StreamReader(fileName))
{
string citation = "SOFT155";
while (!reader.EndOfStream)
{
var lines = File.ReadAllLines(fileName);
lineFromFile = reader.ReadLine();
List<string> matchedList = new List<string>();
string[] linesArr = File.ReadAllLines(fileName);
//find matches
foreach (string s in linesArr)
{
if (s.Contains(citation))
{
matchedList.Add(s); //matched
}
}
//output
foreach (string s in matchedList)
{
string citationLine = s;
string[] lineData = citationLine.Split(',');
programmeNameLabel.Text = lineData[0];
stageNumberLabel.Text = lineData[1];
selectedModuleLabel.Text = lineData[2];
moduleTitleTextBox.Text = lineData[3];
creditsTextBox.Text = lineData[4];
semesterTextBox.Text = lineData[5];
examWeightingTextBox.Text = lineData[6];
examMarkTextBox.Text = lineData[7];
testWeightingTextBox.Text = lineData[8];
testMarkTextBox.Text = lineData[9];
courseworkWeightingTextBox.Text = lineData[10];
courseworkMarkTexbox.Text = lineData[11];
}
}
这是应用程序运行时的外观:
谢谢大家按照David的建议,使用文本框:
string citation = textBoxCitation.Text;
PS:这是建设性的批评:您声明了一些不使用的变量。此外,您的最后一个foreach是无用的,因为无论“matchedList”有多大,您的程序都只会显示最后一个结果。您可以做更多的事情来改进代码,但我认为最后一个foreach更容易开始代码>?但是,我已经尝试过了,因为我想在按下按钮后使用它,我不知道如何在(例如)“editModuleButton\u Click”中访问“字符串引用”您可以将其设置为表单字段或属性,而不是局部变量,然后从这两个位置访问它。关于如何实现这一点,有很多教程,我不明白您为什么要在这里解决这个问题?一个小建议-您可能不想调用
ReadAllLines
两次。
string[] lineOfContents = File.ReadAllLines(fileName);
foreach (var line in lineOfContents)
{
string[] tokens = line.Split(',');
editModuleComboBox.Items.Add(tokens[2]);
deleteModuleComboBox.Items.Add(tokens[2]);
}
string citation = textBoxCitation.Text;