2016-02-28 109 views
-2

有兩個文件,每個文件都有多列數據,最多約有14,000行,整齊排列,並且所有內容都有。 File1有6列(學生ID#,學期代碼#,班級名稱,班級代碼#(儘管有些是字母)),學生收到的字母等級,以及他們收到的數字等級從兩個單獨文件中的列中獲取數據並在另一個文件中合併

第二個文件有4列班級名稱,班級代碼,每週有多少小時,以及指定代碼(三個字母表示是否爲文科班)

任務是將所有內容從第一個文件輸出到新文件,但添加兩列(從第二個文件)對應於每個適當的行,具有課程和指定代碼的小時。

第二個任務是採取這個新文件,並輸出到它的學生證,GPA總學分,CSCI課程中的GPA以及非文科課程花費的百分比。

我不是要求別人爲我做(顯然),這只是我已經用完了想法。我們應該只使用fstream,iostream,字符串,if語句,循環,函數和「.clear();」和「seekg(ios :: beg);」(我們也不應該使用getline) 基本上超級簡單的東西,沒有數組或矢量或任何東西。

我想出瞭如何使用while循環和if語句將兩個文件的一部分輸出到第三個文件中,但我不知道如何告訴它將列中的值從一個文件比較到另一個列中的列文件,並且如果值相等,則從其他列輸出相應的值(每個班級和指定代碼的小時數)。我還需要很多幫助來完成第二項任務。

+0

十個小時是不是時間的大量。 –

回答

0

你在找什麼是map。如果您需要幫助灑進一個map你可以看看這篇文章:Is there a Way to Stream in a Map?

但你會想要做的就是流文件2成map,期運用了「類代碼」爲map按鍵和tuple或您自己的自定義結構作爲值。然後將map與您當前從File1輸出的行中的「class code#」進行索引,並附加map的索引值的相應元素。因爲這個問題缺乏示範性的輸入和輸出,所以我創建了一個示例性的File1輸入,就好像它已經被輸入:tuple<int, int, string, string, char, int> File1[] = {make_tuple(13, 1, "Computer Science 1", "CS101", 'A', 100), make_tuple(13, 2, "Computer Science 2", "CS201", 'A', 100)};和File2輸入一樣,好像它已經具有了一樣在被流傳輸:map<string, tuple<string, int, string>> File2 = {make_pair("CS101", make_tuple("Computer Science 1", 4, "NOT")), make_pair("CS201", make_tuple("Computer Science 2", 4, "NOT"))};

這些然後可以被流傳輸時,有可能對另一個文件如下:

for(auto& it : File1) { 
    const auto& i = File2[get<3>(it)]; 

    cout << get<0>(it) << ' ' << get<1>(it) << ' ' << get<2>(it) << ' ' << get<3>(it) << ' ' << get<4>(it) << ' ' << get<5>(it) << ' ' << get<1>(i) << ' ' << get<2>(i) << endl; 
} 

[Live Example]

相關問題