【问题标题】:C++ Store input file with multiple delimiterC++ 使用多个分隔符存储输入文件
【发布时间】:2012-11-16 13:36:54
【问题描述】:

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

}

【问题讨论】:

  • 前段时间我在一个有点类似的问题上发布了answer。看起来同样的基本想法在这里也适用。如果您真的不想明确阅读逗号和方括号,您可以创建一个将它们视为空格的语言环境。 An example 用斜线和破折号来做到这一点。
  • 您之前来过这里并且刚刚注册了一个新帐户吗?这个问题看起来非常类似于不久前提出的string of questions...
  • 我看了看那个用户,他似乎和我做同样的事情(可能是我的同学),但我可以向你保证我们是两个不同的人

标签: c++ iostream delimiter


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多