使用拆分方法C#从逗号分隔的.txt文件加载2个数组

时间:2017-04-26 03:01:42

标签: c# arrays visual-studio-2015 split console-application

我正在尝试从逗号分隔的.txt文件加载数据,并将信息放在2个并行数组中。 .txt文件包含两列数据,StudentName& StudentGrades。

它的外观与此类似......

萨利,67个
弗兰克,32
约翰,98岁

我正在尝试使用split方法来读取逗号分隔文件,但是我已经尝试了许多不同的方法来使这个工作没有运气。我得到的错误是“无法将字符串[]隐式转换为字符串”

如果我将.txt数据分别放在单独的行上并从代码中删除split方法就可以了。但是我需要将文件用逗号分隔。

 public static void LoadArray()
    {

        StreamReader studentInfoStreamReader = new StreamReader("LittleRecord2.txt");

        for (counter = 0; counter < 21; counter++)
        {
            if (studentInfoStreamReader.Peek() != -1) // CHECK TO SEE IF END OF FILE
            {

                studentName[counter] = (studentInfoStreamReader.ReadLine().Split(','));   // CODE WITH ERROR
                studentGrade[counter] = Convert.ToInt32(studentInfoStreamReader.ReadLine());        
            }
        }

        studentInfoStreamReader.Close(); 
    }

    public static void OptionOne()
    {
        LoadArray();

        Console.WriteLine("Student Name".ToString().PadRight(20) + ("Student Grade".ToString().PadRight(5)));
        Console.WriteLine();

        for (int c = 0; c < counter; c++)
        {
            Console.WriteLine("{0} {1}", studentName[c].PadRight(20), studentGrade[c].ToString().PadRight(5));
        }


    }

4 个答案:

答案 0 :(得分:1)

Split方法返回一个数组。在您使用逗号分割的情况下,它将生成一个包含2个项目的数组。索引0处的第一项是名称,索引1处的第二项是等级:

var splitParts = (studentInfoStreamReader.ReadLine().Split(','));
studentName[counter] = splitParts[0];
studentGrade[counter] = Convert.ToInt32(splitParts[1]);

答案 1 :(得分:1)

使用类会更有效,而不是并行数组。此外,除非你的文件有数百万个条目将整个文件读入内存可能会更快:

class Student
{
    public string name = "";
    public int grade = 0;
    public Student()
    {

    }
}
List<Student> GetStudents(string fileName)
{
    return (from string line in System.IO.File.ReadAllLines(fileName)
            let data = line.Split(",".ToArray())
            select new Student { name = data[0], grade = int.Parse(data[1]) }).ToList();

}

答案 2 :(得分:0)

string[] x = studentInfoStreamReader.ReadLine().Split(',');
studentName[counter] = x[0];  
studentGrade[counter] = x[1];

答案 3 :(得分:0)

这是因为string.Split()返回一个数组,并且您将其分配给标量值。将拆分结果存储在新的数组变量中,然后单独分配其元素:

public static void LoadArray()
{
    StreamReader studentInfoStreamReader = new StreamReader("LittleRecord2.txt");
    for (counter = 0; counter < 21; counter++)
    {
        if (studentInfoStreamReader.Peek() != -1) // CHECK TO SEE IF END OF FILE
        {
            var splitLine = studentInfoStreamReader.ReadLine().Split(',');
            studentName[counter] = splitLine[0];
            studentGrade[counter] = splitLine[1];
        }
    }
    studentInfoStreamReader.Close(); 
}