我想读取每一行和每列,但为什么会弹出错误消息“确保列表中的最大索引小于列表大小”.pls help ...
string[] lines = File.ReadAllLines("C:\\test.txt");
for (int i = 0; i < lines.Length; i++)
{
string[] line = lines[i].Split('^');
for (int j = 0; j < line.Length; j++)
{
textBox1.Text = line[1];
break;
}
}
答案 0 :(得分:2)
我想你想在行中加j
textBox1.Text = line[j];
而不是
textBox1.Text = line[1];
如果在^
分割的行中有多个部分,则无效。
完整代码:
string[] lines = File.ReadAllLines("C:\\test.txt");
for (int i = 0; i < lines.Length; i++)
{
string[] line = lines[i].Split('^');
for (int j = 0; j < line.Length; j++)
{
textBox1.Text = line[j];
break;
}
}
您也可以考虑更改第textBox1.Text = line[j];
行,因为它会覆盖循环中的文字。
修改强>
根据下面的评论,从第一行读取第一列的代码是:
string[] lines = File.ReadAllLines("C:\\test.txt");
if (lines.Length > 0)
{
string[] line = lines[0].Split('^');
if (line.Length > 0)
textBox1.Text = line[0];
}
答案 1 :(得分:2)
也许你有一个空行或没有^
的行。因为您在此处访问字符串数组中的第二个项目:
textBox1.Text = line[1];
也许您想要始终访问第一个元素,然后使用0
,因为索引是基于零的:
textBox1.Text = line[0];
然而,更有意义的是
textBox1.Text += line[j];
因为你无论如何都在循环列。
但我只想读第1行和第1列...所以怎么做?
然后你根本不需要循环:
string firstLinesColumnOne = lines.Length > 0 ? lines[0].Split('^')[0] : "";
textBox1.Text = firstLinesFirstColumn;
如果我想阅读每一栏并显示到不同的文本框?例 文本文件是row1 {ab cd ef} row2 {dc fc fd} row3 {dg hj ki}所以输出 应该是textbox1 =第1列textbox2 =第2列textbox3 =第3列
假设您要将拆分的三列分配给三个文本框,并为文本框中的文件中的每一行添加一个新行:
IEnumerable<String[]> lineColumns = lines
.Select(line => line.Split('^'));
textBox1.Lines = lineColumns.Select(cols => cols[0]).ToArray();
textBox2.Lines = lineColumns.Select(cols => cols[1]).ToArray();
textBox3.Lines = lineColumns.Select(cols => cols[2]).ToArray();
答案 2 :(得分:0)
for (int j = 0; j < line.Length; j++)
{
textBox1.Text = line[1];
如果line.Length == 1
没有line[1]
,则只有line[0]