我正在尝试将csv文件中的数据读入一个结构向量,每个结构包含来自足球比赛的各种值(进攻球队,四分之一,下来,码,去,玩desc等)。我正在尝试使用stringstream将字符串转换为int,但我正在返回垃圾数据。
Data d; //structs
vector<Data> TeamData; //vector of structs
string s;
istringstream iss( s );
ifstream myfile;
myfile.open("CSV file here"); //open CSV file
while ( !myfile.eof() )
{
getline (myfile, d.gameid, ','); //read to comma, store in d.gameid
getline (myfile, s, ','); //read to comma
iss >> d.qtr; //use stringstream to store into d.qtr
repeat for remaining values . . .
如果您想知道,cvs文件看起来与此类似:
20070906_NO@IND,1,47,25,IND,NO,1,10,31,(2:25) J.Addai up the middle to NO 27 for 4 yards (S.Fujita).,0,0,2007
20070906_NO@IND,1,46,42,IND,NO,2,6,27,(1:42) P.Manning pass deep left to M.Harrison for 27 yards TOUCHDOWN.,0,0,2007
当我尝试输出相关的所有内容时,我的程序会返回这样的数据:
Game ID: 20070906_NO@IND
Offensive team: IND
Quarter: 7077994
Down: 4696320
To go: 4670480
Play: (2:25) J.Addai up the middle to NO 27 for 4 yards (S.Fujita).
Game ID: 20070906_NO@IND
Offensive team: IND
Quarter: 7077994
Down: 4696320
To go: 4670480
Play: (1:42) P.Manning pass deep left to M.Harrison for 27 yards TOUCHDOWN.
答案 0 :(得分:2)
我认为你应该看看我对“阅读花车”的回答 而不是在空格上解析逗号。
答案 1 :(得分:0)
istringstream
复制在构造函数中传递的字符串,因此对后面的字符串所做的更改不会对流产生任何影响。您应该构造一个新流,或者每次字符串更改时调用istringstream:str()
方法提供一个新字符串。
getline (myfile, s, ','); //read to comma
iss.str(s); // supply new string to stream
iss >> d.qtr; //use stringstream to store into d.qtr