2016-12-15 12 views
-1

名前と年齢の列が2つしか含まれていない.csvファイルがあります。それは次のようになります:csvファイルをC++で読む

Name  Age 
Peter  16 
George 15.5 
Daniel 18.5 

私は二倍のベクトルで人の年齢を収集したいと思います。だから私はvect = {16,15.5,18.5}のようなものを持っていたいと思います。

標準ライブラリのみを使用するとどうすれば実現できますか?

感謝

+3

私は最終的にそれをやった方法です。 – sjsam

+2

これはCSVファイルのように見えるのではなく、固定フォーマットファイルのようですか?最初のフィールドはオフセット0から始まり、2番目のフィールドはオフセット10から始まります。 – Elijan9

答えて

0

あなたはこのような何かを行うことができます。

#include <sstream> 
#include <string> 
#include <fstream> 

ifstream infile("yourfile.csv"); 
std::vector<double> ages; 
while (infile) 
{ 
    std::string line; 
    if (!std::getline(infile, line,' ')) break; 
    std::istringstream iss(line); 
    string name; 
    double age; 
    if (!(iss >> name >> age)) { break; } 
    ages.push_back(age); 
} 
+1

あなたは[this](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)を読むべきです – NathanOliver

1

@BugsFree、スクリプトいただきありがとうございますが、私のために動作するようには思えません。 (誰かが興味を持っている場合...)ここで

は `どのように私はこれを達成できる?`あなたは問題を解決するためにそうfar`やっている `が先行されなければならない

ifstream infile("myfile.csv"); 
vector<string> classData; 
vector<double> ages; 
std::string line; 

while (getline(infile, line,'\n')) 
{ 
    classData.push_back(line); //Get each line of the file as a string 
} 

int s = classData.size(); 
for (unsigned int i=1; i<s; ++i){ 
    std::size_t pos = classData[i].find(",");  // position of the end of the name of each one in the respective string 
    ages[i-1] = std::stod(classData[i].substr(pos+1,classData[i].size())); // convert string age to a double 
} 
+0

あなたの質問*は、 、 's。だから誰も実際にはうまくいく解決策で答えることはできませんでした。 – crashmstr

+0

"csv"ファイルはカンマで区切られたファイルなので、このようなファイルを扱う際には値がカンマで区切られていることは明らかです。 Microsoft Excelで開いたときのデータの表示例を示しただけです。 – rado

+0

はい、誰もそれについて間違っていることはありません。ここでも、データをCSV形式ではなく、タブ区切りまたは固定幅のように表示します。データの表示とCSVの1つの言及が嫌いである場合は、明確にするための質問(あなたの明確な答えがない場合)を行うか、データに関する実際のことを推測する必要があります。 – crashmstr

関連する問題