2016-12-15 144 views
-1

我有一個.csv文件,它只包含兩列具有人名和年齡的列。它看起來像:在C++中讀取csv文件

Name  Age 
Peter  16 
George 15.5 
Daniel 18.5 

我只想收集在一個雙打載體的人的年齡。所以我想有一些像vect = {16,15.5,18.5}。

如何在僅使用標準庫時實現此目標?

非常感謝

+3

'我怎麼能做到這一點?'應該用'你做了什麼,所以far'來解決這個問題前面。 – sjsam

+2

這看起來不像一個CSV文件,而是像一個固定格式的文件?第一場從偏移量0開始,第二場在偏移量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

你應該閱讀[這個](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – NathanOliver

1

@BugsFree謝謝你的劇本,但它似乎並沒有爲我工作。

這是我如何做它最終(如果有人有興趣...)

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

你的問題*不*顯示數據與' ,單曲。所以沒有人可以真正回答一個可行的解決方案。 – crashmstr

+0

「csv」文件通過定義是一個逗號分隔的文件,所以很顯然,在我處理這樣的文件時,值之間用逗號分隔。我只是舉了一個例子,說明在Microsoft Excel下打開數據時的樣子。 – rado

+0

是的,沒有人有過錯。再一次,你顯示的數據不是CSV,而是看起來像標籤分隔或固定寬度的東西。如果您顯示的數據和您提及的CSV數據不存在爭議,我們或者需要提出問題來澄清(未由您澄清答案)或猜測數據的真實含義。 – crashmstr