我正在尝试从逗号分隔的.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));
}
}
答案 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();
}