C ++存储具有多个分隔符的输入文件

时间:2012-11-16 03:37:34

标签: c++ iostream delimiter

我有一个包含以下数据的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 个答案:

答案 0 :(得分:0)

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

  1. 创建一个读取文本并创建对象的工厂对象 基于文字。例如,当&#34; Point2D&#34;读它创建一个 Point2D实例。
  2. 在每个类中创建方法以读取自己的数据。例如, Point2D会有一种方法来解析&#34; [3,2]&#34;并指定3 第一个纵坐标,第二个纵坐标.2。
  3. 在工厂中,让对象读取行的其余部分并分配 它的成员来自文本行。
  4. 如果使用&#34; load从公共父对象中创建所有对象 来自档案&#34;方法,您可以让工厂调用该方法 使用&#34;泛型&#34;指向父母的指针。
  5. 简单。让对象读取自己的数据。