2012-05-13 5 views
1

私の目的は、ファイルからデータを取り出し、分割して今後の変更のために配列に配置することです。テキストファイルのデータを配列に読み込んで操作しようとすると

ザ・データは次のようになります。私は数学、3215を取りたい

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| 

、3とマークし、配列に入れ、 その後、サム・スコット12 H 3.4 1991年1月11日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; 
     } 
    } 
} 

は、その後、私は何も保存されていないことを確認してみました:

は、これは私がこれまで持っているものです。

答えて

1

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

2

最初の行1は残りの行とは非常に異なるため、別の解析アルゴリズムが必要です。以下のような何か:

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

という点で、使用して別のgetlineに渡し、その後、各ラインのためにstringstreamを行うことによって処理することができ2..n読み取る行は「|」区切り文字として、さらに一歩全く同じ考え方をとるヘッダ行を読み取り、各トークン(SAM、スコット、12、H、3.4、1991年1月11日、2012年3月15日)

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

を取得します各トークンは、区切り文字として ' - 'を付けた別のgetlineでさらに解析されます。最初のトークン(コース1、コース1、番号、教授)を無視し、2番目のトークン(Maths、3215、3、Mark)を使用します。

関連する問題