我的目的是使用File.ReadAllText逐行读取文本文件。之后,我将检查每个字符串数组是否包含我期望的关键字,我将把整个字符串输出并显示在文本框中。所以这是我的代码:
OpenFileDialog fopen = new OpenFileDialog();
fopen.Filter = "(All type)|*.*";
fopen.ShowDialog();
if(fopen.FileName != "")
{
textBox1.Text = fopen.FileName;
string save = fopen.FileName;
string save1 = save.Split('.')[0];
//string readtext = File.ReadAllText(save);
//string[] readtext1 = readtext.Split('\n');
string[] readline = File.ReadAllLines(save);
int lines = readline.Count();
textBox2.Text = readtext;
for (int i = 0; i < lines; i++ )
{
if (readline[i].Contains("CPL"))
{
int len = readline[i].Length;
textBox3.Text = readline[i].Substring(2, len - 4);
textBox3.AppendText(Environment.NewLine);
}
}
问题是:如果输入文件看起来像
<>something<>
<>something1<>
<>something2<>
<>something3CPL<>
<>something4CPL<>
<>something5CPL<>
输出始终只是最后一个字符串数组。 (这里是5CPL)。 我的期望是什么
something3CPL
something4CPL
something5CPL
有人能告诉我我的代码有什么问题吗? 谢谢。
答案 0 :(得分:2)
您每次迭代都会在文本框中指定(覆盖)文本,因此它只保存您从文件中获取的最后一个值:
textBox3.Text = readline[i].Substring(2, len - 4);
相反,使用与Environment.Newline
:
textBox3.AppendText(readline[i].Substring(2, len - 4));
这将继续根据需要将新值添加到文本框现有文本的末尾。
答案 1 :(得分:1)
您需要追加每个文本,而不是设置每次迭代中的文本:
textBox3.AppendText(readline[i].Substring(2, len - 4));
答案 2 :(得分:0)
可以取代
textBox3.Text = readline[i].Substring(2, len - 4);
使用
textBox3.Text += readline[i].Substring(2, len - 4);
答案 3 :(得分:0)
作为文本框,您无法垂直查看结果。
无论如何这是解决方案:
OpenFileDialog fopen = new OpenFileDialog();
fopen.Filter = "(All type)|*.*";
fopen.ShowDialog();
if(fopen.FileName != "")
{
textBox1.Text = fopen.FileName;
string save = fopen.FileName;
string save1 = save.Split('.')[0];
//string readtext = File.ReadAllText(save);
//string[] readtext1 = readtext.Split('\n');
string[] readline = File.ReadAllLines(save);
int lines = readline.Count();
textBox2.Text = readtext;
for (int i = 0; i < lines; i++ )
{
if (readline[i].Contains("CPL"))
{
int len = readline[i].Length;
textBox3.Text += (readline[i].Substring(2, len - 4) + " ");
}
}