C++ 使用多个分隔符存储输入文件

C++ Store input file with multiple delimiter

本文关键字:存储 输入 文件 分隔符 C++      更新时间:2023-10-16

>我有一个包含以下数据的 txt 文件:

Point2D, [3, 2]
Line3D, [7, 12, 3], [-9, 13, 68]
Point3D, [1, 3, 8]
Line2D, [5, 7], [3, 8]

我如何通过删除多个分隔符来实际存储它们,以便我可以提取数据?

我想要的是读入第一行并忽略","["和"]",以便我可以单独存储Point2D,3和2。然后我继续继续第二行,依此类推。

另外,是否可以这样做,例如:

第一行"Point2D, [3, 2

]",当检测到 Point2D 时,它会将 3 和 2 存储到 point2d.x 和 point2d.y 中。

对于第二行"Line3D, [7, 12, 3], [-9, 13, 68]",它将相应地将值存储到 line3d.x,line3d.y,line3d.z 等中。

现在我只能让它忽略','。这是我到目前为止所做的:

void readData()
{
    string fileName;
    int i=0;
    cout << "Enter file name: ";
    cin >> fileName;
    fstream infile;
    infile.open(fileName.data());
    // This will count the number of lines in the textfile.
    if (! infile.is_open())
    {
        cerr<<"Error : " << fileName.data() <<" is not found"<<endl;
    }
    string line;    
    stringstream field;
    while (getline(infile,line))
    { 
        string f;
        field<<line;
        while (getline(field,f,','))
        {
            recordA.push_back(f);              
        }
        field.clear();
    }
    cout << recordA.size() << " records read in successfully!";
    infile.close();

}

为了使你的生活复杂化,我建议如下:

    创建一个
  1. 在文本中读取并创建一个对象的工厂对象基于文本。例如,当读取"Point2D"时,它会创建一个 Point2D实例。
  2. 在每个类中创建方法以读取自己的数据。例如 Point2D将有一个方法来解析"[3,2]"并将 3 分配给第一个纵坐标和 2 到第二个纵坐标。
  3. 在工厂中,让对象读取行的其余部分并分配其成员来自文本行。
  4. 如果您使用"load "从公共父对象创建所有对象from file"方法,你可以让工厂调用该方法使用指向父级的"泛型"指针。

单纯。 让对象读取自己的数据。