2016-10-06 79 views
-4

我無法弄清楚如何從文本文件中讀取項目並將其放入int數組中。我的目標是統計平均分數。爲此,我需要閱讀這個數字,告訴我一個學生有多少年級,然後使用這個數字,自己閱讀成績。例如,第一列顯示的等級的數量,所有剩餘的列顯示等級:C#如何將項目讀入數組

5;8;7;9;10;4 3;8;9;10 2;5;9

的代碼,我寫道:

 static void ReadData(out Student[] Student, out Faculty Faculty) 
    { 
     using (StreamReader read = new StreamReader(@"Data", Encoding.GetEncoding(1257))) 
     { 
      string line = null; 
      Student = new Student[Faculty.CMax]; 
      Faculty = new Faculty(); 
      while (null != (line = read.ReadLine())) 
      { 
       string[] values = line.Split(';'); 
       string lastname = values[0]; 
       string name = values[1]; 
       string group = values[2]; 
       int amount = int.Parse(values[3]); 
       int grades = int.Parse(values[4]); 
       Student studen = new Student(lastname, name, group, amount, grades); 
       Student.Take[Faculty.AmountOfStudents++] = studen; 
      } 
     } 
    } 

我知道int[] grades = int.Parse(values[4]);的問題。但我不知道如何解決它。可能是一個新手問題,感謝您的幫助。

+1

你到數組分配整數那麼它只是一個複製他們的問題。應該是'int grades = int.Parse(values [4]);' 但是你應該更好地解釋你的值,我不明白'line'代表什麼。 – DekiChan

+0

你怎麼知道'int [] grades = int.Parse(values [4]);'是問題所在?你在那條線上有例外嗎? – Zack

+0

第一行有6個項目,因此您可以索引從0到5.第二行有四個項目,因此您可以索引從0到3.第三行有三個項目,因此您可以索引從0到2.值[4]將僅工作在第一排。爲什麼行的大小不同? – jdweng

回答

3

你澄清後,似乎你想採取:

Smith;John;XYZ;4;2;4;6;8 

和檢索[2,4,6,8]數組,所以你可以從得到的平均值。

如果你不能做我在評論中提到的內容,那麼這是一個解決方法。由於成績的數量是無關緊要的,所以請忽略它,並且您會認識到您需要一個int數組,其中包含的項目數少於原始數量。如果你到LINQ

string[] fields = val.Split(';'); 
int[] grades = new int[fields.Length - 4]; 
for (int i = 4; i < fields.Length; ++i) 
{ 
    grades[i - 4] = int.Parse(fields[i]); 
} 

或者一些其他的替代版本:

string[] fields = val.Split(';'); 
int[] grades = Enumerable.Range(4, fields.Length - 4) 
    .Select(i => int.Parse(fields[i])) 
    .ToArray(); 

string[] fields = val.Split(';'); 
int[] grades = fields.Select((s, i) => new { s, i }) 
    .Where(x => x.i >= 4) 
    .Select(x => int.Parse(x.s)) 
    .ToArray(); 
+0

對不起,我不善於解釋,我的目標是計算平均分數。爲此,我需要閱讀這個數字,告訴我一個學生有多少年級,然後使用這個數字,自己閱讀成績。 – Domzaza

+0

所以你的數據看起來像是'史密斯;約翰; XYZ; 4; 2; 4; 6; 8',其中4是多少個等級將遵循?首先,這是一個荒謬的數據格式,所以我會試着讓它解決一些更有用的問題。 「成績的數量」是毫無意義的,因爲成績已經在那裏,所以你可以指望他們而不是被告知有多少成績。如果你真的需要這種類型的數據,你應該使用不同的分隔符來分級,比如'Smith; John; XYZ; 2 | 4 | 6 | 8',所以你可以用分號分割,然後分割字段[ 3]'通過管道。 –

+1

@Domzaza請用你在評論中做出的澄清來更新你的問題。 –