我正在尝试读取数据并仅输出CSV文件中的选定数据(日期,时间和S(速度)。我的程序能够运行,但它以奇怪的方式循环。第1行,而不是第1行和2,线1,2和3等等。程序中显示的最终记录也不正确(0/3/2016 23:50)。需要一些指导来纠正这个问题。
以下记事本格式的示例数据。它包含数千行,但只选择最后3行来说明我的问题。忽略下面的“线”,它只是告诉你哪一行是excel格式。第1行是我忽略的标题,后跟数据。
第1行:WAST,DP,Dta,Dts,EV,QFE,QFF,QNH,RF,RH,S,SR,ST1,ST2,ST3,ST4,Sx,T
第2行: 31/03/2016 23:30 ,11.4,257,11,0,1012.9,1016.4,1016.5,0,63.5, 5 ,13 ,26.4,25.8,25.6,26.1,7,18.48
第3行: 31/03/2016 23:40 ,11.4,250,15,0,1012.9,1016.4,1016.5,0,64.7, 5 ,10 ,26.4,25.8,25.6,26.1,6,18.19
第4行: 31/03/2016 23:50 ,11.4,243,5,0,1012.7,1016.2,1016.3,0,65.8, 3 ,11 ,26.3,25.8,25.6,26.1,5,17.95
2016年3月31日23:30 速度:5
2016年3月31日23:30 速度:5
31/3/2016 23:40 速度:5
2016年3月31日23:30 速度:5
31/3/2016 23:40 速度:5
31/3/2016 23:50 速度:3
2016年3月31日23:30 速度:5
31/3/2016 23:40 速度:5
31/3/2016 23:50 速度:3
0/3/2016 23:50 速度:3
最高速度:5
完成!
2016年3月31日23:30 速度:5
31/3/2016 23:40 速度:5
31/3/2016 23:50 速度:3
最高速度:5
完成!
using namespace std;
typedef struct
{
Date d;
Time t;
float speed;
}
WindLogType;
//declare speed max function
ostream & operator <<(ostream &osObject, const WindLogType & w1);
istream & operator >>(istream &input, WindLogType &w1);
int main()
{
string filename;
ifstream input;
filename = "Data.csv";
input.open(filename.c_str());
input.ignore(500,'\n');
Vector<WindLogType> windlog;
string line,line2, readDay, readMonth, readYear, readHour, readMinute;
float sp;
while(!input.eof())
{
getline(input,readDay,'/');
getline(input,readMonth,'/');
getline(input,readYear,' ');
getline(input,readHour,':');
getline(input,readMinute,',');
int day1 =atoi(readDay.c_str());
int month1=atoi(readMonth.c_str());
int year1=atoi(readYear.c_str());
int hour1=atoi(readHour.c_str());
int minute1=atoi(readMinute.c_str());
float s1;
for(int i = 0;i<10;i++)
{
input>>s1;
input.ignore(50,',');
}
WindLogType T1;//create a record
T1.d.setDate(day1,month1,year1);
T1.t.setTime(hour1,minute1);
T1.speed = s1;
windlog.push_back(T1);//push inside vector
windlog.print();
getline(input,line2,'\n');
}
float maxSpeed;
WindLogType H1;
H1=windlog.at(0);
maxSpeed=H1.speed;
for(int i=0;i<windlog.size();i++)
{
if(windlog.at(i).speed>maxSpeed)
{
maxSpeed=windlog.at(i).speed;
}
}
cout<<"Max Speed: "<<maxSpeed<<endl;
cout<<"Done!"<<endl;
return 0;
}
ostream & operator <<(ostream &osObject, const WindLogType &w1)
{
osObject<<w1.d<<w1.t<<endl<<"Speed: "<<w1.speed;
return osObject;
}
istream &operator >>(istream & input, WindLogType &w1)
{
input>>w1.d>>w1.t>>w1.speed;
return input;
}