如何在c#中读取文本文件规范行和列

时间:2013-10-17 08:31:29

标签: c# text-files

我想读取每一行和每列,但为什么会弹出错误消息“确保列表中的最大索引小于列表大小”.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;
            }
        }

3 个答案:

答案 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]