1

私の目的は、ファイルからデータを取得し、分割して、将来の変更のために配列に配置することです。

データは次のようになります。

course1-Maths|course1-3215|number-3|professor-Mark

sam|scott|12|H|3.4|1/11/1991|3/15/2012

john|rummer|12|A|3|1/11/1982|7/15/2004

sammy|brown|12|C|2.4|1/11/1991|4/12/2006

end_Roster1|

数学、3215、3、およびマークを取り、配列に入れたいと思います。次に、sam scott 12 H 3.4 1/11/1991 3/15/2012.

これは私がこれまでに持っているものです:

infile.open("file.txt", fstream::in | fstream::out | fstream::app);
while(!infile.eof())
{
    while ( getline(infile, line, '-') )
    {
        if ( getline(infile, line, '|') )
        {
            r = new data;
            r->setRcourse_name(line);
            r->setRcourse_code(3);//error not a string
            r->setRcredit(3);//error not a string pre filled
            r->setRinstructor(line);

            cout << line << endl;
        }
    }
}

次に、何も保存されていないことを表示しようとしました。

4

2 に答える 2

2

まず、1 行目は残りの行とは大きく異なるため、別の解析アルゴリズムが必要です。何かのようなもの:

bool first = true;
while(!infile.eof()) 
    {
        if (first) 
            {
            // read header line
            first = false;
            }
        else 
            {
            // read lines 2..n
            }   
    }

行 2..n の読み取りは、行ごとに文字列ストリームを作成し、'|' を使用して別の getline に渡すことで処理できます。各トークンを取得する区切り記号として (sam、scott、12、H、3.4、1/11/1991、3/15/2012)

if (getline(infile, line, '\n')) 
    {
    stringstream ssline(line);
    string token;
    while (getline(ssline, token, '|'))
        vector.push_back(token);
    }

ヘッダー行を読み取ると、まったく同じ概念がさらに一歩進み、各トークンは区切り文字として「-」を使用して別の getline でさらに解析されます。最初のトークン (course1、course1、number、professor) を毎回無視し、2 番目のトークン (Maths、3215、3、Mark) を使用します。

于 2012-05-13T17:46:06.067 に答える
1

ネストされた while ループの条件内にある行を完全に無視しています。while ループの 1 か所から getline を呼び出し、一連の if-then-else 条件を使用してその内容を調べる必要があります。

于 2012-05-13T15:43:18.137 に答える