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题:运输车辆安全驾驶行为的分析 ,大概意思就是在各种其他条件(如:天气、风速、温度、湿度、降水等)的变化之中,从批量数据中找出驾驶行为对行车安全、运输效率和节能情况的影响,最终,我们建立了一个得分制模型,用来描述在各种条件下,任何不当的驾驶行为会减扣相应的分数,最后根据总得分来体现不当的驾驶行为对行车安全、效率等的影响。虽然最终没能获奖,但竞赛的整个过程还是比较有意思的,值得记录一下。

原文地址:https://www.cnblogs.com/andrew3/p/12721527.html