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;
}
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」