• C++读写文件


    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <string>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <io.h>
    using namespace std;
    
    string removeSuffix(string fileName)
    //去除文件后缀
    {
        const char* full_name = fileName.c_str();
        const char*  mn_first = full_name;
        int tmp = strlen(full_name);//长度不包含'/0'
        const char*  mn_last = full_name /*+ strlen(full_name)*/;
        if (strrchr(full_name, '\') != NULL)//去除路径,只留文件名
            mn_first = strrchr(full_name, '\') + 1;
        if (strrchr(full_name, '.') != NULL)
            mn_last = strrchr(full_name, '.');//获取.*后缀
        fileName.assign(mn_first, mn_last);
        return fileName;
    }
    int main()
    {
        ifstream fin("D:\C++study\Scoringmodel\AF00348.txt", ios::in);//打开文件
        FILE *filepath;
        filepath = fopen("D:\C++study\Scoringmodel\AF00348.txt", "a");
        long Handle;
        string ss;
        string s;
        struct _finddata_t FileInfo;
        if ((Handle = _findfirst("D:\C++study\Scoringmodel\AF00348.txt", &FileInfo)) == -1L)
            printf("没有找到匹配的项目
    ");
        else
        {
            ss=FileInfo.name;//文件名
            //cout<<ss<<endl;
        }
        s=removeSuffix(ss);//去掉后缀
        //cout<<s<<endl;
        char line[200001]={0};//按行读取数据
        string date = "";//表示行车日期,格式为年/月/日
        string time = "";//表示行车时间,格式为时/分/秒
        int flag;//表示车的状态,1表示车在启动中,0表示熄火
        int v;//表示车的速度
        int a;//表示车的加速度
        int angle;//方向角
        int day0=0;//
        int hh0=0;//
        int mm0=0;//
        int ss0=0;//
        int day1=0;
        int hh1=0;
        int mm1=0;
        int ss1=0;
        int t0=0;//记录一段时间驾驶的总时间
        int num0=0;//记录疲劳驾驶0-1小时的次数
        int t1=0;//属于疲劳驾驶的总时间
        double grade=100.00;//每辆车的得分,初值为满分100
        double k0 = 0.0005 ;//表示疲劳驾驶0-1小时扣分中的系数
        double k13 = 0.0007;//疲劳驾驶1-2小时扣分系数
        double k14 = 0.0008;//疲劳驾驶2小时以上扣分系数
        double grade0=0;//疲劳驾驶0-1小时应扣的分值
        int num3=0;//加速度达到三级急加/减速标准的次数
        double k3 = 0.0004 ;//三级急加/减速扣分中的系数
        double grade3=0;//三级急加/减速应扣的分数
        int num2=0;//加速度达到二级急加/减速标准的次数
        double k2 = 0.0003 ;//二级急加/减速扣分中的系数
        double grade2=0;//二级急加/减速应扣的分数
        int num1=0;//加速度达到一级急加/减速标准的次数
        double k1 = 0.0002 ;//一级急加/减速扣分中的系数
        double grade1=0;//一级急加/减速应扣的分数
        int num4=0;//怠速预热的次数
        int t2=0;//一段时间内超长怠速的时间
        int mm2=0;//记录怠速开始的分
        int ss2=0;//记录怠速开始的秒
        int mm3=0;//记录怠速结束的分
        int ss3=0;//记录怠速结束的秒
        int t3=0;//总的超长怠速时间
        double grade4=0;//怠速预热应扣的分数
        double k4 = 0.0001 ;//怠速预热的系数
        double grade5=0;//超长怠速应扣的分数
        double k5 = 0.00002;//超长怠速的系数
        int t4=0;//一段时间内的熄火滑行时间
        int t5=0;//总的熄火滑行时间
        int mm4=0;//记录熄火滑行开始的分
        int mm5=0;//记录熄火滑行结束的分
        int ss4=0;//记录熄火滑行开始的秒
        int ss5=0;//记录熄火滑行结束的秒
        double k6 = 0.0005 ;//熄火滑行的系数
        double grade6=0;//熄火滑行应扣的分数
        int num13=0;//熄火滑行的次数
        int num5=0;//超速10%以内的次数
        double k7 = 0.0004 ;//超速10%以内的系数
        double grade7=0;//超速10%以内应扣的分数
        int num6=0;//超速10%~20%的次数
        double k8 = 0.0067 ;//超速10%~20%的系数
        double grade8=0;//超速10%~20%应扣的分数
        int num7=0;//超速20%~50%的次数
        double k9 = 0.0500 ;//超速20%~50%的系数
        double grade9=0;//超速20%~50%应扣的分数
        int num8=0;//超速50%~70%的次数
        double k10 = 0.0800 ;//超速50%~70%的系数
        double grade10=0;//超速50%~70%应扣的分数
        int num9=0;//超速70%以上的次数
        double k11 = 0.1000 ;//超速70%以上的系数
        double grade11=0;//超速70%以上应扣的分数
        double k12 = 0.8000 ;//处于夜间的系数
        int num10=0;//记录疲劳驾驶1-2小时的次数
        int num11=0;//记录疲劳驾驶2小时以上的次数
        double grade12=0;//疲劳驾驶1-2小时应扣的分数
        double grade13=0;//疲劳驾驶2小时以上应扣的分数
        int num12=0;
        //int hh;
        int startangle=0;//开始变道方向角
        int stopangle=0;//变道结束方向角
        int subangle=0;//角度差
        int num14=0;//急变道次数
        double k15 = 0.0003;//急变道系数
        double grade14=0;//急变道扣分
        while(fin.getline(line, sizeof(line)))
        {
    
            stringstream word(line);//定义字符串流
            word >> date;
            word >> time;
            word >> flag;
            word >> v;
            word >> a;
            word >> angle;
            //word >> hh;
            /*cout << "date: " << date << endl;
            cout << "time: " << time << endl;
            cout << "flag: " << flag << endl;
            cout << "v: " << v << endl;
            cout << "a: " << a << endl;
            cout << "angle: "<<angle<<endl;*/
            /*if(hh>2)
                num12++;*/
            if(flag==1&&v>0)
            {
                day0=(int)date[4];//记录一段连续行驶开始时的日期,连续行驶没有超过一个月的,不必记录年/月
                hh0=(int)time[0];//记录时
                mm0=(int)time[2];//记录分
                ss0=(int)time[4];//记录秒
            }
            if(flag==0)
            {
                day1=(int)date[4];//记录一段连续行驶结束时的日期,连续行驶没有超过一个月的,不必记录年/月
                hh1=(int)time[0];//记录时
                mm1=(int)time[2];//记录分
                ss1=(int)time[4];//记录秒
            }
            t0=(day1-day0)*24*3600+(hh1-hh0)*3600+(mm1-mm0)*60+(ss1-ss0);//一段时间内的驾驶总时间,以秒为单位
            if(t0>14400&t0<=18000)
                //即为疲劳驾驶:连续驾驶4小时以上,5小时以内
            {
                t1+=t0;
                num0++;//疲劳驾驶0-1小时的次数
            }
            else if(t0>18000&t0<=21600)
            {
                num10++;
            }
            else if(t0>21600)
            {
                num11++;
            }
            t0=0;//每段时间算完之后将t0置为0计算另一段
            if(fabs(a)>1&&fabs(a)<=2)
                //加速度达到三级急加/减速标准
            {
                num3++;//次数+1
            }
            else if(fabs(a)>2&&fabs(a)<=3)
                //加速度达到二级急加/减速标准
            {
                num2++;
            }
            else if(fabs(a)>3&&fabs(a)<=5)
                //加速度达到一级急加/减速标准
            {
                num1++;
            }
            else ;
            if(flag==1&&v==0)
                //车辆处于怠速预热开始状态
            {
                num4++;//怠速的次数
                mm2=(int)time[2];
                ss2=(int)time[4];
            }
            if(flag==1&&v>0)
                //怠速结束
            {
                mm3=(int)time[2];
                ss3=(int)time[4];
            }
            t2=(mm3-mm2)*60+(ss3-ss2);//一段时间内的怠速时间,以秒为单位
            if(t2>180)
                //超长怠速
            {
                t3+=t2;
            }
            t2=0;
            if(flag==0&&v>0)
                //熄火滑行开始状态
            {
                num13++;//熄火滑行的次数
                mm4=(int)time[2];
                ss4=(int)time[4];
            }
            if((flag==0&&v==0)||(flag==1&&v>0))
                //熄火滑行已经结束
            {
                mm5=(int)time[2];
                ss5=(int)time[4];
            }
            t4=(mm5-mm4)*60+(ss5-ss4);//一段时间的熄火滑行时间
            t5+=t4;//总的熄火滑行时间
            t4=0;//计算下一段前置0
            if(v>90&&v<=99)
                //超速10%以内,90为基准
            {
                num5++;
            }
            else if(v>99&&v<=108)
                //超速10%~20%
            {
                num6++;
            }
            else if(v>108&&v<=135)
                //超速20%~50%
            {
                num7++;
            }
            else if(v>135&&v<=153)
                //超速50%~70%
            {
                num8++;
            }
            else if(v>153)
                //超速70%以上
            {
                num9++;
            }
            if(v>80)
            {
                startangle=angle;
            }
            if(v>80)
            {
                stopangle=angle;
            }
            subangle=stopangle-startangle;
            if(fabs(subangle)>5)
            {
                num14++;
            }
            if((int(time[0])>=0&&int(time[0])<=6)||int(time[0])>=22&&int(time[0])<=23)
            {
                k0*=k12;
                k1*=k12;
                k2*=k12;
                k3*=k12;
                k4*=k12;
                k5*=k12;
                k6*=k12;
                k7*=k12;
                k8*=k12;
                k9*=k12;
                k10*=k12;
                k11*=k12;
                k13*=k12;
                k14*=k12;
            }
        }
        t3/=3600;//超长怠速以小时为单位
        grade12=num10*k13;//疲劳驾驶1-2小时应扣的分数
        grade13=num11*k14;//疲劳驾驶2小时以上应扣的分数
        grade14=num14*k15;//急变道应扣去的分数
        grade0=num0*k0;//疲劳驾驶0-1小时的扣分值
        grade3=k3*num3;//三级急加/减速应扣的分数
        grade2=num2*k2;//二级急加/减速应扣的分数
        grade1=num1*k1;//一级急加/减速应扣的分数
        grade4=k4*num4;//怠速预热应扣的分数
        grade5=k5*t3*t3;//超长怠速应扣的分数
        grade6=k6*num13;//熄火滑行应扣的分数
        grade7=k7*num5;//超速10%以内应扣的分数
        grade8=k8*num6;//超速10%~20%应扣的分数
        grade9=num7*k9;//超速20%~50%应扣的分数
        grade10=num8*k10;//超速50%~70%应扣的分数
        grade11=num9*k11;//超速70%以上应扣的分数
        grade=grade-grade0-grade3-grade2-grade1-grade4
        -grade5-grade6-grade7-grade8-grade9-grade10-grade11-grade12-grade13-grade14;//最终得分值
        /*cout<<endl;
        cout<<endl;
        cout<<num3<<endl;//三级急加/减速次数
        cout<<num2<<endl;//二级急加/减速次数
        cout<<num1<<endl;//一级急加/减速次数
        cout<<num4<<endl;//怠速预热次数
        //cout<<num12<<endl;
        cout<<num0<<endl;
        cout<<num10<<endl;
        cout<<num11<<endl;
        cout<<num13<<endl;
        cout<<t3<<endl;
        cout<<num14<<endl;
    
        cout<<"疲劳驾驶0-1小时扣去的分数为:"<<grade0<<endl;
        cout<<"疲劳驾驶1-2小时扣去的分数为:"<<grade12<<endl;
        cout<<"疲劳驾驶2小时以上扣去的分数为:"<<grade13<<endl;
        cout<<"急变道扣去的分数为:"<<grade14<<endl;
        cout<<"三级急加/减速扣去的分数为:"<<grade3<<endl;
        cout<<"二级急加/减速扣去的分数为:"<<grade2<<endl;
        cout<<"一级急加/减速扣去的分数为:"<<grade1<<endl;
        cout<<"怠速预热扣去的分数为:"<<grade4<<endl;
        cout<<"超长怠速扣去的分数为:"<<grade5<<endl;
        cout<<"熄火滑行扣去的分数为:"<<grade6<<endl;
        cout<<"超速10%以内扣去的分数为:"<<grade7<<endl;
        cout<<"超速10%~20%扣去的分数为:"<<grade8<<endl;
        cout<<"超速20%~50%扣去的分数为:"<<grade9<<endl;
        cout<<"超速50%~70%扣去的分数为:"<<grade10<<endl;
        cout<<"超速70%以上扣去的分数为:"<<grade11<<endl;
    
        cout<<endl;
        cout<<endl;*/
        cout<<"这辆车最终的总得分是:"<<grade<<endl;
        ofstream outfile("车辆综合得分.txt", ios::app);
        outfile<<s<<"车的综合得分为:"<<grade<<endl;
        fin.clear();
        fin.close();//关闭文件,释放内存
        outfile.close();
    }
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <string>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <io.h>
    using namespace std;
    
    int main()
    {
        string sheng="";
        string shi="";
        string xian="";
        string date="";
        string fensu="";
        double wendu=0.0;
        string tianqi="";
        double jiangshui=0.0;
        double shidu=0.0;
        string csheng="";
        string cshi="";
        string cxian="";
        string cdate="";
        ifstream myfile("test.txt",ios::in);
        char line[88888]={0};
        ofstream outfile("Score.txt", ios::app);
        if (!myfile.is_open())
        {
            cout << "未成功打开文件" << endl;
        }
        while(myfile.getline(line, sizeof(line)))
        {
            int fsgrade=0;
            int wdgrade=0;
            int tqgrade=0;
            int jsgrade=0;
            int sdgrade=0;
            stringstream word(line);//定义字符串流
            word >> sheng;
            word >> shi;
            word >> xian;
            word >> date;
            word >> fensu;
            word >> wendu;
            word >> tianqi;
            word >> jiangshui;
            word >> shidu;
            word >> csheng;
            word >> cshi;
            word >> cxian;
            word >> cdate;
            if(fensu=="<=3")
                fsgrade=5;
            else if(fensu[0]=='4')
                fsgrade=4;
            else if(fensu[0]=='7')
                fsgrade=3;
            else if(fensu[0]=='1'&&fensu[1]=='0')
                fsgrade=2;
            else
                fsgrade=1;
            if(wendu>=16.00&&wendu<22.00)
                wdgrade=5;
            else if(wendu>=8.00&&wendu<15.00)
                wdgrade=4;
            else if(wendu>=23.00&&wendu<29.00)
                wdgrade=3;
            else if(wendu>=0.00&&wendu<7.00)
                wdgrade=2;
            else
                wdgrade=1;
            if(tianqi[0]=='q')
                tqgrade=5;
            else if(tianqi[0]=='y')
                tqgrade=4;
            else if(tianqi[0]=='x'&&tianqi[1]=='i'&&tianqi[2]=='a'&&tianqi[3]=='o')
                tqgrade=3;
            else if(tianqi[0]=='b')
                tqgrade=2;
            else
                tqgrade=1;
            if(jiangshui>=0&&jiangshui<7)
                jsgrade=5;
            else if(jiangshui>=7&&jiangshui<15)
                jsgrade=4;
            else if(jiangshui>=15&&jiangshui<23)
                jsgrade=3;
            else if(jiangshui>=23&&jiangshui<29)
                jsgrade=2;
            else
                jsgrade=1;
            if(shidu>=0.2&&shidu<0.40)
                sdgrade=5;
            else if(shidu>=0.4&&shidu<0.60)
                sdgrade=4;
            else if(shidu>=0&&shidu<0.20)
                sdgrade=3;
            else if(shidu>=0.60&&shidu<0.80)
                sdgrade=2;
            else
                sdgrade=1;
            //cout<<fsgrade<<endl;
            outfile << fsgrade <<" "<<wdgrade<<" "<<tqgrade<<" "<<jsgrade<<" "<<sdgrade<<endl;
        }
        myfile.close();
        outfile.close();
        return 0;
    }

    哈哈,其实这是当时参加第七届“泰迪杯”数据挖掘挑战赛的时候写的代码,和两位数学专业的同学参加的,我主要负责写代码。当时我们选的是C题:运输车辆安全驾驶行为的分析 ,大概意思就是在各种其他条件(如:天气、风速、温度、湿度、降水等)的变化之中,从批量数据中找出驾驶行为对行车安全、运输效率和节能情况的影响,最终,我们建立了一个得分制模型,用来描述在各种条件下,任何不当的驾驶行为会减扣相应的分数,最后根据总得分来体现不当的驾驶行为对行车安全、效率等的影响。虽然最终没能获奖,但竞赛的整个过程还是比较有意思的,值得记录一下。

  • 相关阅读:
    jquery跑马灯效果(ajax调取数据)
    IE6下双倍边距和关于IE6 7display:inline无效的问题
    js 利用ajax将前台数据传到后台(json格式)
    js 利用ajax将前台数据传到后台(1)
    js 点击某一块就显示某一块
    点击进行复制的JS代码
    jq利用ajax调用后台方法
    每一个程序员需要了解的10个Linux命令
    101个MySQL的调节和优化技巧
    JavaScript Math和Number对象
  • 原文地址:https://www.cnblogs.com/andrew3/p/12721527.html
Copyright © 2020-2023  润新知