我有一个包含此
的数据文本文件Map2D, [3, 2]
Dot3D, [25, -69, -33], [-2, -41, 58]
Map3D, [6, 9, -50]
Map2D, [3, 2]
Dot3D, [7, -12, 3], [9, 13, 68]
Map3D, [6, 9, 5]
Map2D, [3, 2]
Dot3D, [70, -120, -3], [-29, 1, 268]
Dot3D, [7, 12, 3], [-9, 13, 68]
Map3D, [1, 3, 8]
Dot2D, [5, 7], [3, 8]
基本上文本文件的第一个数据是我得到4级的类名
Map2D
Map3D
Dot2D
Dot3D
我正在尝试编写自己的文件操作符,以便我的程序可以提取上面的数据并重载提取运算符>>对于每个4类,然后将其存储到相关对象中。
我正在考虑使用矢量,地图,集合或列表进行存储。但是对于这个我如何实现我想做的事情,比如存储到类的相关对象中。
我尝试使用Google搜索如何创建自己的文件操作器,但如果有人可以向我展示一些示例代码并且我可以在测试文件中编译并执行它然后自己观察输出,那将会很好。我想使用iomanip对>>进行重载运营商
我必须使用操纵器,因为我需要创建类似
的东西我需要做类似
的事情cout << "Input File Name";
cin >> readFile;
并执行所有数据读取&amp;对象创建
我很抱歉所造成的一切麻烦。然后它将逐行读取记录,然后创建类及其中的数据。
感谢您的帮助!
答案 0 :(得分:3)
这是std::cin
的示例。使用fstream
它应该可以正常工作。解析你的输入真的很讨厌。是否可以从输入中删除括号(“[”amd“]”)?
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <c>
class Map2D {
std::vector<int> values;
public:
friend std::istream& operator>>(std::istream& in, Map2D m) {
std::string i;
in >> i;
std::stringstream ss(i);
std::getline(ss, i, '[');
std::getline(ss, i, ',');
ss >> i;
std::cout << i << std::endl;
in >> i;
ss.str("");
ss << i;
i = i.substr(0, i.size()-1);
ss >> i;
std::cout << i << std::endl;;
}
};
int main() {
std::string type, file_name;
std::cout << "Input File Name";
std::cin >> file_name;
std::fstream file(file_name.c_str());
Map2D m;
while (std::getline(std::cin, type, ',')) {
if(type.find("Map2D") != std::string::npos) {
file >> m;
}
}
}
答案 1 :(得分:2)
您可以使用cin
来获取文件名,但是您应该编写一个可以解析文件的帮助方法。
我的建议是创建一个名为DataMembers
的类或类似的类。在该类中,您可以使用一个读取数据成员文件的辅助方法。该类可以有4个向量,用于存储从文件中读取的数据。
class DataMembers
{
private:
std::vector<Map2D> _map2Ds;
std::vector<Map3D> _map3Ds;
....
public:
void readDataFile(std::string inFileName);
void writeDataFile(std::string outFileName);
};
readDataFile方法应该执行以下操作
您可能希望编写一些其他私有方法来处理数据类型的创建并分配给正确的集合。