【问题标题】:Taking data from columns in two separate files and combining in another file从两个单独文件中的列中获取数据并合并到另一个文件中
【发布时间】:2016-02-28 20:05:05
【问题描述】:

有两个文件,每个文件都有多列数据,最多约 14,000 行,间距整齐,应有尽有。 File1 有 6 列(学生 ID #、学期代码 #、班级名称、班级代码 #(虽然有些有字母)、学生收到的字母成绩和他们收到的数字成绩。

第二个文件有 4 列。班级名称、班级代码、每周时数和指定代码(三个字母表示是否为文科班)。

任务是将第一个文件中的所有内容输出到新文件中,但添加对应于每个适当行的两列(来自第二个文件),其中包含课程和指定代码的小时数。

第二个任务是获取这个新文件,并将学生 ID、总体 GPA、CSCI 课程的 GPA 以及参加非文科课程的时间百分比输出到其中。

我不是要别人为我做这件事(显然),只是我已经没有想法了。我们应该只使用 fstream、iostream、字符串、if 语句、循环、函数和“.clear();”和“seekg(ios::beg);”(我们也不应该使用获取线) 基本上超级简单的东西,没有数组或向量或任何东西。

我想出了如何使用 while 循环和 if 语句将两个文件的部分输出到第三个文件中,但我不知道如何告诉它比较一个文件中的列与不同文件中的列中的值并且如果值相等,则从其他列输出相应的值(每个班级的小时数和指定代码)。第二个任务我也需要很多帮助。

【问题讨论】:

  • 十个小时并不是很长的时间。

标签: c++ file loops output fstream


【解决方案1】:

您要查找的是map。如果您需要流式传输到map 的帮助,您可以查看这篇文章:Is there a Way to Stream in a Map?

但您需要将 File2 流式传输到 map,使用“类代码”作为 map 键,并使用 tuple 或您自己的自定义结构作为值。然后使用您当前从 File1 输出的行中的“类代码 #”对该 map 进行索引,并附加 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]

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多