C ++从没有STL

时间:2017-03-08 13:01:48

标签: c++ csv datetime io stl

我尝试使用以下值读取 CSV 文件。 的日期时间下,DP,DTA,DTS,EV,QFE,QFF,QNH,R,RH,的速度下,的辐射下,ST,ST2,ST3 ,ST4,SX,T

31/03/2016 9:00 14.6 175 17 0 1013.4 1016.9 1017 0 68.2 6 512 22.7 24.1 25.5 26.1 8 20.74 31/03/2016 9:10 14.6 194 22 0.1 1013.4 1016.9 1017 0 67.2 5 565 22.7 24.1 25.5 26.1 8 20.97

目前,我需要数据的列来自dateTime,速度和辐射。 但是,当我调用windlog.print时,从第二行开始每隔一行打印dateTime,并从第三行开始每隔一行打印辐射,所以我想知道我对忽略函数做了什么错误吗? 我不太熟悉它......

这里的关键问题是我们不假设使用任何STL数据结构。 我为此写了一个简单的矢量类。

typedef struct
{
 Date d;
 Time t;
 float speed;
 int solar;
}
W;
//Methods

void getMaxSpeed(int y2, int m2);
//var
int choice, year,m, tt;
ifstream input;
string filename,month,num;
Vector<W> windlog;
W T1;
ostream & operator << (ostream & osObject, const WindLogType & W1);
istream & operator >> (istream & input, WindLogType & W1);
int main()
{
 filename = "test.csv";
 string line2,line,sDay, sMonth, sYear, sHH, sMM;

 input.open(filename.c_str());
 input.ignore(500,'\n');
 if(!input.is_open())
 {
    cout<< "File not found."<<endl;
    return 0;
 }
 else
 {
    while(getline(input,line))
    {
        //Get Date
        getline(input, sDay,'/');
        getline(input, sMonth,'/');
        getline(input, sYear,' ');
        //Get Time
        getline(input, sHH,':');
        getline(input, sMM,',');
        //Parse into variable , convert from string to int
        int day1 = atoi(sDay.c_str());
        int month1 = atoi(sMonth.c_str());
        int year1 = atoi(sYear.c_str());
        int hour1 = atoi(sHH.c_str());
        int min1 = atoi(sMM.c_str());

        float s1; 
        int sr;
        // speed
        for (int i=0; i<10; i++)
        {
            input >> s1;
            input.ignore(100, ',');
        }
        //radiation
        for(int j =0; j<18; j++)
        {
            input >> sr;
            input.ignore(90,',');
        }

        // create a record
        T1.d.setDate(day1, month1, year1);
        T1.t.setTime(hour1, min1);
        T1.speed = s1;
        T1.solar = sr;

        windlog.push_back(T1);         
    }
}
windlog.print();
getMaxSpeed(2017,3);

return 0;
}

我试图根据用户输入的年份和月份获得最大速度。 但getMaxSpeed(2017,3)的当前输出是: &#39;第3个月2017年的最大风速为:6.30584e-044&#39; 所以我需要知道相应过滤的正确语法是什么。 GetMaximumValue方法

void getMaxSpeed(int y2, int m2)
{

 float maxSpeed;
 for (int i=0; i<windlog.size(); i++)
 {
    int y3 = windlog.at(i).d.getYear();
    int m3 = windlog.at(i).d.getMonth();
    if(y3==y2 && m3==m2){
    while(y3==y2 && m3==m2)
    {
        maxSpeed = windlog.at(0).speed;
        if (windlog.at(i).speed > maxSpeed)
        {
            maxSpeed = windlog.at(i).speed;
        }
     }

    }
  }
  cout<< maxSpeed << endl;

  }

一旦我找到maxspeed,我将能够完成其余的功能......

1 个答案:

答案 0 :(得分:0)

根据您提供的内容,您告诉ignore查找逗号,但您的数据中没有任何内容,因此它会占用90或100个字符。如果您将分隔符更改为&#39; &#39;,你应该得到你想要的结果