zoukankan      html  css  js  c++  java
  • 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 ";
                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 ",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;
    }

    #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 ";
                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 ",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;
    }

  • 相关阅读:
    python_3 装饰器之初次见面
    python_迭代器
    Python_1生成器(下)之单线并行--生产着消费者模型
    Python_ 1生成器(上)初识生成器
    memcache 和 redis 的区别
    Linux 面试总结
    网络面试总结
    操作系统相关面试总结
    剑指offer 数组中的重复数字
    svn-主副分支使用
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5370533.html
Copyright © 2011-2022 走看看