0

我想阅读每一行和每一列,但为什么它会弹出错误消息“确保列表上的最大索引小于列表大小”。请帮助...

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;
            }
        }
4

3 回答 3

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];
}
于 2013-10-17T08:34:25.817 回答
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 = column 1 textbox2 = column 2 textbox3 = column 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();
于 2013-10-17T08:34:39.907 回答
0
        for (int j = 0; j < line.Length; j++)
        {
            textBox1.Text = line[1];

如果line.Length == 1没有line[1],只有line[0]

于 2013-10-17T08:35:07.713 回答