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

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

FILE operattion的更多相关文章

  1. 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file

    我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...

  2. HTML中上传与读取图片或文件(input file)----在路上(25)

    input file相关知识简例 在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传.批量上传.删除照片.增加照片.读取图片.对上传的图片或文件的判断,比如限制图片的张数.限 ...

  3. logstash file输入,无输出原因与解决办法

    1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...

  4. input[tyle="file"]样式修改及上传文件名显示

    默认的上传样式我们总觉得不太好看,根据需求总想改成和上下结构统一的风格…… 实现方法和思路: 1.在input元素外加a超链接标签 2.给a标签设置按钮样式 3.设置input[type='file' ...

  5. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  6. [笔记]HAproxy reload config file with uninterrupt session

    HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great op ...

  7. VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...

  8. input type='file'上传控件假样式

    采用bootstrap框架样式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...

  9. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

随机推荐

  1. 程序员 & 设计师都能用上的 75 份速查手册

    分享75份开发人员和设计师会用到的速查手册,由 vikas 收集整理,包括:jQuery.HTML.HTML5.CSS.CSS3.JavaScript.Photoshop .git.Linux.Jav ...

  2. jQuery入门——(二)

    0.基本知识 $与jQuery等价,$.fun代表jQuery的全局方法. jQuery必须首先导入JQuery库, jQuery的事件都不带on,例如 $("#btn").cli ...

  3. 【算法学习】【洛谷】树链剖分 & P3384 【模板】树链剖分 P2146 软件包管理器

    刚学的好玩算法,AC2题,非常开心. 其实很早就有教过,以前以为很难就没有学,现在发现其实很简单也很有用. 更重要的是我很好调试,两题都是几乎一遍过的. 介绍树链剖分前,先确保已经学会以下基本技巧: ...

  4. 【bzoj题解】1001 狼抓兔子

    题目描述 现在小朋友们最喜欢"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:   ...

  5. linux下的usb抓包方法【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-4508834.html 1.配置内核使能usb monitor: make menuconfig       ...

  6. aarch64_c1

    CBFlib-0.9.5.15-3.fc26.aarch64.rpm 2017-02-06 06:55 393K fedora Mirroring Project CBFlib-devel-0.9.5 ...

  7. Codechef AMXOR

    Problem Codechef Solution 我们可以按位进行考虑,如果一个 \(m_i\) 在某一位上为1,但 \(x_i\) 却取了0,那么我们就称它脱离了限制,更低位可以随便乱填.也就是说 ...

  8. Team Foundation Server 2010服务器安装

    本安装指南使用Windows Server 2008企业版为基础,安装Windows Server 2008 SP2(必须),在此操作系统环境上进行TFS2010的安装与配置. 三.系统用户设置 1. ...

  9. MongoDB-MongoDB重装系统后恢复

    重装系统后,把原mongoDB安装目录和原mongoDB的data目录拷贝到新硬盘的D盘上. 恢复的方法如下. 1.D:\Mongodb里放着mongod.cfg和data C:\Users\Admi ...

  10. Python 文件IO

    Python 文件I/O 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下: #!/u ...