2

私は csv ファイルから、フットボールの試合 (攻撃チーム、クォーター、ダウン、残りヤード、プレイ デスクなど) のさまざまな値を含む構造体のベクトルにデータを読み込もうとしています。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.
4

2 に答える 2

2

コンマで空白の解析を解析する代わりに、「フロートを読む」に対する私の答えを見るべきだと思います。

ifsstream を使用して float を読み取る

于 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 に答える