2016-07-17 10 views
-1

私はCの初心者ですから、私は助けが必要です!!! 。私は以下の列に生徒の詳細を含む.csvファイルを持っています。私がここに必要なものは、個人が得点した最高のマークに基づいています。次のように出力を取得する必要があります。 (/ * csvファイル内のデータは、 Manojさん、64、56を、それぞれ行と列のセル100 * /)csvファイルを読み込んで行の値と列の値を表示する方法

名、数学、科学、英語(CSVのヘッダ)

Akashさん、80、67、54

こと72

スバース、78,84,63

私は読み取り操作を行うことができ、行全体を表示しました。しかし、私の問題は、各科目の最高得点から生徒と科目の名前を表示することです。

サンプル出力:

英語 - Manojさん

数学 - Subas

、科学Akashさん

私が真ん中にこだわっているとVBを使用せずに任意の答えが高く評価されています。

答えて

0

要件の記述がサンプル出力とどのように一致するかわかりません。ここでは、各科目と最高級の学生を取得するためのコードです。集計LINQのため、この質問で回答へ

List<string[]> data = new List<string[]>(); 

using (StringReader sr = new StringReader(csvText)) 
{ 
    while (sr.Peek() > 0) 
    { 
     data.Add(sr.ReadLine().Split(',')); 
    } 
} 

//Iterates through columns, skipping first one (names) 
List<string> output = new List<string>(); 
for (int i = 1; i < data[0].Count(); i++) 
{ 
    string subjectName = data[0][i]; 
    Dictionary<string,int> grades = new Dictionary<string, int>(); 
    //Iterates through rows, skipping first one (headers) 
    for (int j = 1; j < data.Count; j++) 
    { 
     grades.Add(data[j][0],Convert.ToInt32(data[i][j])); 
    } 
    output.Add(subjectName + " - " + grades.Aggregate((l, r) => l.Value > r.Value ? l : r).Key); 
} 

クレジット:Get key of highest value in Dictionary

+0

どうもありがとうトール!!! ...私はそれが可能だと思いますよ....まず私は考えを持っていましたList の名前列だけを取って、数字の後でListのマーク列を取ると思った。 ...最後に、最高のマークと名前を得るためのロジック部分を置いた。 – cjgeez

+1

是非、ここにあなたのソリューションを含めて、他の人が彼らの想像をくすぐるものを選ぶことができます。 – Thor

関連する問題