2011-07-08 11 views
1

私は、std :: stringstreamに格納されているコンマ区切りの値のリストを取得して、それらをベクトルのように入れたいと思うVisual Studio 2008 C++プロジェクトを持っていますこの:構造体のベクトルにcsvストリームを非直列化する

これを実現するための最良の方法は何
{ { "My", "Mother", "Eats" }, 
    { "Donuts", "From", "Menards" } } 

:ストリームは「私、母、食べる、\メナーズから、nDonutsを、」含まれている場合、得られた構造があろうと、このような

struct Foo 
{ 
    std::string A; 
    std::string B; 
    std::string C; 
} 

typedef std::vector<Foo> FooList; 

std::stringstream csv; // contains comma separated values 

?文字列がどのようにベクトルにコピーされるかを指定する方法があるなら、私はboost.splitを使って調べていました。

FooList list; 
boost::split(list, csv.str(), boost::is_any_of(",")); 

私は、ストリームデータを管理しているので、それは少し異なり、物事が容易になり、フォーマットならば、私はそれを行うことができます。

+0

ウェイの詳細情報:http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c –

答えて

4
// Input 
std::stringstream csv; 

// Prepare variables 
FooList v; 
std::vector<string> tokens(3); 
std::string line; 

// Iterate over lines 
while (std::getline(csv, tmp)) { 

    // Grab comma-delimited tokens 
    tokens.clear(); 
    boost::split(tokens, tmp, boost::is_any_of(",")); 

    // Verify line format 
    if (tokens.size() != 3) 
     throw "There weren't three entries in that line >.<"; 

    // Create and store `Foo` 
    Foo f = { tokens[0], tokens[1], tokens[2] }; 
    v.push_back(f); 
} 
+1

まで値は引用され、コンマが付きます:-D –

+0

@Vlad:はい、それまでは。 OPはそれが可能であると述べなかった。 OK、彼はそれもそうではないと述べなかったが、彼は使用例を示しており、引用符は存在しなかった。 –

+0

ただ言ってください。心配しないでください:) –

1

試してみてください。ここでは、このトピックに関する

std::stringstream csv; 

FooList v; 

std::string line;  
while (std::getline(csv, tmp)) 
{ 
    std::stringstream linestream(line); 

    Foo item; 
    std::getline(linestream, item.A, ','); 
    std::getline(linestream, item.B, ','); 
    std::getline(linestream, item.C, ','); 

    v.push_back(item); 
} 
+0

エラーチェックに失敗します –

関連する問題