2016-02-28 112 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]

相关问题