2016-07-29 11 views
1

finde Ich habe eine .csv Akte, die Namen, Rolle, Themen entsprechend enthält. Ich analysierte es in eine Datentabelle und ich berechnete die höchste Markierung jedes Themas. Alles, was ich berechnen möchte, ist der Durchschnitt jedes Subjekts. Kann mir jemand dabei helfen !!!!!Wie man Durchschnitt jeder Spalte einer Datentabelle unter Verwendung C#

Das war meine Ausgabe.

Bestnote für ComputerScience:

Name : Manoj 
    Roll Number : 1212334556 
    Mark : 94 

Bestnote für Biologie:

Name : Sandeep 
    Roll Number : 1223456477 
    Mark : 90 

Bestnote für Commerce:

Name : BarathRam 
    Roll Number : 1212345664 
    Mark : 97 

und CSV-Datei enthält Namen, Rollno, Computer, Biologie, Handel.

Jetzt alles, was ich bekommen müssen, ist der Durchschnitt von jedem Fach

Mein Code:

static DataTable table; 
    static void Main(string[] args) 
    { 
     StreamReader r = new StreamReader(@"C:\Users\GOPINATH\Desktop\stud1.csv"); 
     string line = r.ReadLine(); //reads first line - column header 
     string[] part = line.Split(','); //splits the line by comma 
     createDataTable(part); 
     //copy from CSV to DataTable<String,String,int,int,int> 
     while ((line = r.ReadLine()) != null) 
     { 
      try 
      { 
       part = line.Split(','); 
       table.Rows.Add(part[0], part[1], Convert.ToInt32(part[2]), Convert.ToInt32(part[3]), Convert.ToInt32(part[4])); 
      } 
      catch(Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
     r.Close(); 

     int mark1_index = 0, mark2_index = 0, mark3_index = 0; //initailize index value 0 for highest marks 

     //finding the index of the highest mark for each subject 
     for(int i=0 ; i<table.Rows.Count ; i++) 
     { 
      if (Convert.ToInt32(table.Rows[i][2]) > Convert.ToInt32(table.Rows[mark1_index][2])) //subject1 
      { 
       mark1_index = i; 
      } 

      if (Convert.ToInt32(table.Rows[i][3]) > Convert.ToInt32(table.Rows[mark2_index][3])) //subject2 
      { 
       mark2_index = i; 
      } 

      if (Convert.ToInt32(table.Rows[i][4]) > Convert.ToInt32(table.Rows[mark3_index][4])) //subject3 
      { 
       mark3_index = i; 
      } 
     } 

     printmark(table,mark1_index, 2); 
     printmark(table,mark2_index, 3); 
     printmark(table,mark3_index, 4); 

     Console.Read(); 

    } 
    public static void createDataTable(string[] columnName) 
    { 
     //create DataTable<String,String,int,int,int> 
     table = new DataTable(); 
     table.Columns.Add(columnName[0], typeof(String)); 
     table.Columns.Add(columnName[1], typeof(String)); 
     table.Columns.Add(columnName[2], typeof(int)); 
     table.Columns.Add(columnName[3], typeof(int)); 
     table.Columns.Add(columnName[4], typeof(int));  
    } 
    public static void printmark(DataTable t, int rowIndex, int columnIndex) 
    { 
     Console.WriteLine("Highest mark for " + t.Columns[columnIndex].ColumnName + ":"); 
     Console.WriteLine("\tName: " + (string)t.Rows[rowIndex][0]); 
     Console.WriteLine("\tRole Number: " + (string)t.Rows[rowIndex][1]); 
     Console.WriteLine("\tMark: " + (int)t.Rows[rowIndex][columnIndex]); 

    } 
} 

}

Antwort

0

Sie Linq verwenden könnte und dies tun.

DataTable t; 
var average = t.AsEnumerable().Average(x=> x.Field<int>("columnname")); 
+0

wie funktioniert es !!!. Muss ich mein Programm neu strukturieren? – cjgeez

+0

Sie möchten Durchschnitt für jede Spalte finden, richtig? Diese Abfrage berechnet den Durchschnitt für einen gegebenen 'Spaltennamen' –

+0

!! Kannst du genauer sein. Da ich ein Anfänger in C# bin, kann ich die Region nicht finden, wo ich diese Abfrage einfügen muss. Wenn möglich, können Sie Ihre Anfrage in meinem Code senden. Wie finde ich es schwierig zu implementieren. Ich würde mit dem nächsten weitermachen. Vielen Dank !! – cjgeez

0
var result=table.AsEnumerable() 
    .GroupBy(x=>x.Field<string>("Subject")) 
    .Select(x=>new 
    { 
     Subject=x.Key, 
     Average=x.Average(x=> x.Field<int>("Mark")); 
    }).ToList(); 

Um die Durchschnittsnote nach Thema zu berechnen, müssen Sie zunächst vorbehalten GROUPBY dann für jede Gruppe die durchschnittliche berechnen.

+0

Vielen Dank !! @Bumb kannst du mir deine Anfrage zusammen mit meinem Code schicken. Ich finde es etwas schwierig, deine Anfrage in meinen Code einzufügen. Es zeigt Fehler für mich cjgeez

+0

@cjgeez Ich habe Ihren Code nicht überprüft !, Ich nehme an, dass Sie in der Lage waren, die Datei zu lesen und die 'DataTable' zu ​​generieren. Sobald Ihre 'DataTable' generiert ist und Sie die Spalten' Subject' 'und' Mark' 'haben, können Sie meine Abfrage verwenden, um ein' anonymes' Objekt mit 2 Requisiten ('Subject' und' Average') zu erhalten. –

Verwandte Themen