使用StreamReader时如何将每4行分配给一个变量?

时间:2019-05-13 20:05:51

标签: c#

我创建了一个for循环,以从.txt文件中读取行,并希望将第一行分配给一个变量(名字),将第二行分配给另一个变量,其姓氏,将第三行分配给相应的薪水,然后是员工类型的第四行。尽管这对于一个人的信息很有用,但我很难使它适用于多名员工。当我使用i将名字变量分配给每第4行时,出现此错误:

System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数并且小于集合的大小。 参数名称:index'

StreamReader sr = new StreamReader(openFileDialog1.FileName);
frmEmployee form = new frmEmployee();
EmployeeInfo employeeInfo = new EmployeeInfo(fname, lname, empPay, empType);

fileName = openFileDialog1.FileName;
string line;
while ((line = sr.ReadLine()) != null)
{
    for (int i = 0; i < sr.ReadLine().Length; i++){
        //Works for one employee, but not multiple
        fname = File.ReadAllLines(fileName).ElementAt(0);
        lname = File.ReadAllLines(fileName).ElementAt(1);
        empPay = Double.Parse(File.ReadAllLines(fileName).ElementAt(2));
        empType = File.ReadAllLines(fileName).ElementAt(3);

        //Attempt to assign variables to multiple employees

        //fname = File.ReadAllLines(fileName).ElementAt(0 + (4*i));
        //lname = File.ReadAllLines(fileName).ElementAt(1 + (4*i));
        //empPay = Double.Parse(File.ReadAllLines(fileName).ElementAt(2 + (4*i));
        //empType = File.ReadAllLines(fileName).ElementAt(3 + (4*i));
    }

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用for循环,在该循环中,您从3开始计数(由于数组是从零开始的,所以这是第四个索引),然后递增{{ 1}}。这样,您正在阅读4行,然后跳到下一组。然后,您只需在4行中创建新员工并将其添加到列表中即可。

例如:

4

答案 1 :(得分:0)

正如其他人所提到的,有两种相互冲突的方法用于读取文件的内容。 StreamReader.ReadLine()将读取下一行,并在该读取器中显示进度和内部指针。 File.ReadAllLines()一次将所有行读取到内存中的字符串数组中,您的代码可以轻松访问。

假设您的文件不是很大,我认为使用File.ReadAllLines将所有文件内容加载到数组中,然后逐步构建Employee对象集合可能是最简单的。

类似的事情可能会有所帮助:

mse(net, t2, y2)