天天看點

FILE operattion

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <qmessagebox>

#include <qfiledialog>

#include <string>

#include <math.h>       /* cos */

mainwindow::mainwindow(qwidget *parent) :

    qmainwindow(parent),

    ui(new ui::mainwindow)

{

    ui->setupui(this);

    connect(ui->pushbutton,signal(clicked()),this,slot(findcliecked()));

    connect(ui->pushbutton_2,signal(clicked()),this,slot(parselogcliecked()));

}

mainwindow::~mainwindow()

    delete ui;

void mainwindow::findcliecked()

    qstringlist    filenamelist;

    qfiledialog* fd = new qfiledialog(this);

    fd->resize(240,320);

    //fd->setfixedheight(tr("allfile(*.*);;vplog(*.vpl)")); //?置檔案??器

    fd->setviewmode(qfiledialog::list);

    if ( fd->exec() == qdialog::accepted )

    {

        filenamelist = fd->selectedfiles();

        ui->textedit->settext(filenamelist[0]);

    }

    else

        fd->close();

void mainwindow::parselogcliecked()

    qstring qfilename = ui->textedit->toplaintext();

    if (qfilename.isempty())

        return;

    std::string filename = qfilename.tostdstring();

    file * fp = fopen(filename.c_str(),"rb");

    file * wfp = null;

    if (fp)

        int n = filename.rfind('/');

        std::string cvsfilename;

        if (n != std::string::npos)

        {

            cvsfilename = filename.substr(0,n+1);

            cvsfilename += "vp.csv";

            wfp = fopen(cvsfilename.c_str(),"wb");

            if (!wfp)

            {

                fclose(fp);

                return;

            }

            char buff[] = "time,x,y,z\n";

            fwrite(buff, 1, strlen(buff),wfp);

        }

        char line[1024] = {0};

        char outline[1024] = {0};

        while(fgets(line,1024,fp))

            std::string strline = line;

            std::string strtime = parseline(strline,"time:","]");

            int m = strtime.find(',');

            if (m != std::string::npos)

                strtime.replace(m,1," ");

            std::string strx = parseline(strline,"x:",",");

            std::string stry = parseline(strline,"y:",",");

            std::string strz = parseline(strline,"z:",",");

            if (!strx.empty())

                sprintf(outline,"%s,%s,%s,%s\n",strtime.c_str(),strx.c_str(),stry.c_str(),strz.c_str());

                fwrite(outline,1,strlen(outline),wfp);

    fclose(fp);

    fclose(wfp);

    qmessagebox message(qmessagebox::noicon, "title", "finished.");

    message.exec();

std::string mainwindow::parseline(const std::string & strline, const char* start,

                      const char* end)

    std::string strresutl;

    int pos = strline.find(start);

    if (pos != std::string::npos)

        int pos2= strline.find(end,pos);

        if (std::string::npos != pos2)

            strresutl = strline.substr(pos+2,(pos2 -(pos+2)));

    return strresutl;