0

我有一个包含以下数据的 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();

}

4

1 回答 1

0

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

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

简单。让对象读入自己的数据。

于 2012-11-16T05:36:54.793 回答