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

C# 如何在c中读取文本文件规范行和列#,c#,text-files,C#,Text Files,我想阅读每一行和每一列,但为什么它会弹出错误消息“确保列表上的最大索引小于列表大小”。请帮助 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.L

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

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;
            }
        }
string[]lines=File.ReadAllLines(“C:\\test.txt”);
对于(int i=0;i
我想你想让
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;
        }
    }

我想你是想把
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[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}so输出 应为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();
IEnumerable lineColumns=行
.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();

可能您有一行空行或一行没有
^
。因为您在此处访问字符串数组中的第二个项:

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}so输出 应为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();
IEnumerable lineColumns=行
.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();
用于(int j=0;j
如果
line.Length==1
没有
行[1]
,则只有
行[0]

用于(int j=0;j


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

为什么
textBox1.Text=line[1];
?使用
line[j]
break;
表示赋值语句应该有条件…?为什么
textBox1.Text=line[1];
?使用
line[j]
中断;
表示赋值语句应该有一个条件…?@CCY:编辑了我的答案。如果我想阅读每一列并显示到不同的文本框中,你有多少个文本框?我的意思是,列的数量可以改变,但控件的数量通常是固定的。也许你应该使用
列表框
相反。但是,您可以通过索引器直接或在循环中访问每个列。因此,您可以向循环中的
列表框添加项。例如,文本文件为row1{ab cd ef}row2{dc fc fd}row3{dg hj ki}所以输出应该是textbox1=列1 textbox2=列2 textbox3=列3@CCY:你有三行三列,所以三个文本框有9个字段。你想用哪一列?@CCY:编辑了我的答案。如果我想阅读每一列并显示到不同的文本框中?你有多少个文本框?我的意思是,列数是uld会更改,但控件的数量通常是固定的。也许您应该改用
列表框
。但是,您可以直接或在循环中通过索引器访问每一列。因此,您可以向循环中的
列表框
添加项。例如,文本文件为row1{ab cd ef}row2{dc fc fd}row3{dg hj ki}所以输出应该是textbox1=列1 textbox2=列2 textbox3=列3@CCY:您有三行三列,因此三个文本框有9个字段。您想对哪一列使用什么?如果我想读取每一列并显示到不同的文本框中,您可以使用循环代码并在其中选择适当的文本框。示例文本文件为第1行{ab cd ef}第2行{dc fc fd}第3行{dg hj ki}所以输出应该是textbox1=column 1 textbox2=column 2 textbox3=column 3您所说的column 1,column 2究竟是什么意思?textbox1分配column 1值,textbox2分配column 2值如果我想读取每一列并显示到不同的文本框中,您可以使用循环代码并在其中选择适当的文本框。示例文本文件是row1{ab cd ef}row2{dc fc fd}row3{dg hj ki}所以输出应该是textbox1=column 1 textbox2=column 2 textbox3=column 3您所说的column 1,column 2的确切含义是什么?textbox1分配column 1 va