读取文件并输出所选数据

时间:2017-02-24 06:56:05

标签: c++11 codeblocks ifstream

我正在尝试读取数据并仅输出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;
}

0 个答案:

没有答案