如何从txt文件中获取值以便从2d数组创建和调用?

时间:2014-12-15 21:53:43

标签: c#

基本上,我尝试创建的表单允许用户从列表中选择学生姓名,输入项目成绩并单击go。该程序将检查点击的学生,然后将项目成绩乘以同行评估分数。这就是我的问题......

peer eval得分来自peerFile.txt文件。我需要从5×5文件中取出标记并将其放入2d数组中,以便找到学生同行评估分数(数组中各列的平均值)

这是我的代码,应该是使用txt文件中的值加载数组,但它是一个很大的失败。有人可以帮忙吗?

int row = 0;
int column = 0;
double[,] evaluation = new double[row, column];

StreamReader inputFile;
inputFile = File.OpenText("peerFile.txt");

while (row < evaluation.Length && !inputFile.EndOfStream)
{
    evaluation[row, column] = int.Parse(inputFile.ReadLine());
    row++;
    column++;
}
inputFile.Close();

一些额外的细节

我的对等文件设置如下:

0.1,0.9,0.9,1.0,0.4
0.1,0.9,0.9,1.0,0.4
0.1,0.9,0.9,1.0,0.4
0.1,0.9,0.9,1.0,0.4
0.1,0.9,0.9,1.0,0.4

2 个答案:

答案 0 :(得分:1)

因此,如果您的文本文件与您说的一样,那么这不会起作用:

evaluation[row, column] = int.Parse(inputFile.ReadLine());

因为文件中的单行如下所示:

0.1,0.9,0.9,1.0,0.4

您无法解析这样的逗号分隔列表。你首先需要拆分它。像(编辑 - 它们不是整数):

var line =  inputFile.ReadLine();
var values = line.Split(",");

然后你可以遍历那个数组并int.Parse

for (int c = 0; c < values.length; c++) 
{
    evaluation[row,c] = double.Parse(values[c]);
}

答案 1 :(得分:1)

主要问题可能是:

evaluation[row, column] = int.Parse(inputFile.ReadLine());

您在那里阅读了整行文件,然后尝试将其解析为单个int

执行解析和I / O最方便的方法可能是拆分它然后解析它:

int row = 5;
int column = 5;
double[,] evaluation = new double[row, column];

StreamReader inputFile = File.OpenText("peerFile.txt");

int rowi = 0;
while (!inputFile.EndOfStream) {
    int coli = 0;
    foreach(double x in inputFile.ReadLine().Split(new char[] {','}).Select(x => double.Parse(x))) {
        evaluation[rowi,coli] = x;
        coli++;
    }
    rowi++;
}
inputFile.Close();

<强>修饰

  • 解析双打而不是整数:double.Parse;
  • 如果您执行StreamReader.ReadLine(),则会使用String.Split分割不同的列来读出整行。
  • Enumerable<T>.Select LINQ 函数,用于在拆分后迭代所有元素。
  • 迭代器将值分配给数组中的正确索引。