0

次のデータを含むtxtファイルがあります。

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

データを抽出できるように、複数の区切り記号を削除して実際にそれらを保存するにはどうすればよいですか?

私が望むのは、最初の行を読み込んで「、」、「[」、および「]」を無視して、Point2D、3、および 2 を個別に保存できるようにすることです。次に、2行目などに進みます。

また、これを行うことは可能ですか、例えば:

最初の行「Point2D, [3, 2]」は、Point2D が検出されると、3 と 2 が point2d.x と point2d.y に格納されます。

2 行目の "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 番目の縦座標に 2 を割り当てるメソッドがあります。
  3. ファクトリで、オブジェクトに行の残りを読み取らせ、テキスト行からそのメンバーを割り当てます。
  4. 「ファイルからロード」メソッドを使用して共通の親オブジェクトからすべてのオブジェクトを作成する場合、親への「汎用」ポインタを使用してファクトリにメソッドを呼び出すことができます。

シンプルさ。オブジェクトに独自のデータを読み込ませます。

于 2012-11-16T05:36:54.793 に答える