2

我正在尝试将 csv 文件中的数据读取到一个结构向量中,每个结构向量都包含来自足球比赛的各种值(进攻球队、四分之一、向下、要走的码数、播放 desc 等)。我正在尝试使用 stringstream 将字符串转换为整数,但我正在返回垃圾数据。

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.
4

2 回答 2

2

我认为您应该查看我对“阅读浮点数”的回答,而不是在逗号上解析空格。

使用 ifsstream 读取浮点数

于 2015-07-27T15:09:48.177 回答
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
于 2013-09-11T02:55:02.917 回答