0

次の形式のcsvファイルからデータを読み取るアドレス帳プログラムに取り組んでいます

「姓」、「名」、「ニックネーム」、「email1」、「email2」、「phone1」、「phone2」、「住所」、「ウェブサイト」、「誕生日」、「メモ」

次の方法で getline を使用してファイルを読み取りました。

   if(!input.fail())
     { 
       cout<<"File opened"<<endl;
       while(!input.eof())
       {

     getline(input,list) ; 
     contactlist.push_back(list);
     token=con.tokenize(list);  // NOT SURE IF I'm doing this right..am I?

        }
    }

そして、私はクラスの連絡先の1つのトークン化メンバー関数を使用しています。これは次のようになります

// member function reads in a string and tokenizes it
vector<string>Contact::tokenize(string line)
{
    int x = 0, y = 0,i=0;

string token;
vector<string>tokens;
while(x < line.length() && y < line.length())
{

    x = line.find_first_not_of(",", y);
    if(x >=0 && x < line.length())
    {

        y = line.find_first_of(",", x);
        token = line.substr(x, y-x);
        tokens.push_back(token);
        i++;
    }
}

}     

トークン化されたベクターを別のクラスのプライベートベクターメンバー変数に読み込む必要があり、それらをファーストネーム、ラストネームの個々のプライベート変数に読み込む必要があります...クラスContactのメモ.それらをプライベートベクターメンバー変数に読み込むにはどうすればよいですかクラスタイプのクラスタイプと、ベクトルを使用して連絡先を追加する並べ替えなどの評価を行うメンバー関数でそれらを呼び出す方法を教えてください。

合計で、それぞれの実装ファイルとメインを含む 2 つのヘッダー ファイル Contact と Addressbook があります。

また、ベクトル内のベクトル/ベクトルのベクトルにアクセスする明確な概念がある場合は、メインにコンタクトリストとトークンがあります

4

1 に答える 1

1

最初に、トークン化関数を contact クラスから分離する必要があります。csv 行を読み取るのは連絡先の責任ではありません。したがって、このメソッドを新しいトークナイザー クラスに抽出し、無料のトークン化関数を記述するか、boost tokenizerなどのソリューションを使用します。

生成されたトークンを使用して、contact インスタンスを作成するか、それを別のクラスに渡すことができます。

struct Contact
{
  std::string firstName, lastName, email;

  /// Constructor.
  Contact(const std::string& firstName, 
      const std::string& lastName, 
      const std::string& email);
};

struct AnotherClass
{
  /// Constructor.
  AnotherClass(const std::vector<std::string>& tokens) :
     privateVector(tokens)  {}

  /// Construction with input iterators
  template<typename Iter>
  AnotherClass(Iter firstToken, Iter lastToken) :
    privateVector(firstToken, lastToken) {}

private:
  std::vector<std::string> privateVector;
};


int main()
{
  std::string line = ReadLine();
  std::vector<std::string> tokens = tokenize(line);

  Contact newContact(tokens[0], tokens[1], tokens[2]);

  AnotherClass wathever(begin(tokens), end(tokens));
}
于 2012-05-15T06:58:18.977 に答える