123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- setWindowTitle("ivlog_totxt");
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_pushButton_clicked()
- {
- QString strilg = QFileDialog::getOpenFileName(this,"ivlog file",".","*.ilg");
- if(strilg.isEmpty())return;
- QString strtxt = QFileDialog::getSaveFileName(this,"txt file",".","*.txt");
- if(strilg.isEmpty())return;
- if(strtxt.right(4) != ".txt")
- {
- strtxt.append(".txt");
- }
- totxt(strilg,strtxt);
- }
- void MainWindow::totxt(QString strilg, QString strtxt)
- {
- QFile fileilg,filetxt;
- fileilg.setFileName(strilg);
- filetxt.setFileName(strtxt);
- if(!fileilg.open(QIODevice::ReadOnly))
- {
- QMessageBox::warning(this,"totxt","open log file failed",QMessageBox::Yes);
- return;
- }
- if(!filetxt.open(QIODevice::ReadWrite))
- {
- QMessageBox::warning(this,"totxt","open txt file failed",QMessageBox::Yes);
- fileilg.close();
- return;
- }
- int npos = 0;
- int nfilesize = fileilg.size();
- char strhead[4+ sizeof(int)];
- int * pdatalen = (int *)(strhead+4);
- char strmark[5];
- strmark[4] = 0;
- while(npos < nfilesize)
- {
- if(fileilg.read(strhead,4+sizeof(int)) == (4+sizeof(int)))
- {
- }
- else
- {
- std::cout<<" read head error. pos is "<<npos<<std::endl;
- break;
- }
- npos = npos + 4 + sizeof(int);
- memcpy(strmark,strhead,4);
- if(strncmp(strmark,"ilog",4) != 0)
- {
- std::cout<<"mark error. mark is "<<strmark<<std::endl;
- break;
- }
- int ndatasize = *pdatalen;
- if(ndatasize < 1)
- {
- std::cout<<"datasize error. datasize is "<<ndatasize<<std::endl;
- break;
- }
- char * str = new char[ndatasize];
- std::shared_ptr<char> pstr; pstr.reset(str);
- memcpy(str,strhead,4+sizeof(int));
- int nneedread = ndatasize - 4 - sizeof(int);
- if(fileilg.read(str+4+sizeof(int),nneedread) != nneedread)
- {
- std::cout<<"need read error. "<<nneedread<<std::endl;
- break;
- }
- SaveAMsg(str,ndatasize,&filetxt);
- npos = npos + nneedread;
- }
- filetxt.close();
- }
- void MainWindow::SaveAMsg(char *str, int nsize, QFile * filesave)
- {
- int ndatasize;
- int npos = 4;
- memcpy(&ndatasize,str+npos,sizeof(int));npos = npos + sizeof(int);
- if(ndatasize != nsize)
- {
- qDebug("commicate error");
- return;
- }
- int nlognum;
- memcpy(&nlognum,str+npos,sizeof(int));npos = npos +sizeof(int);
- // qDebug("datasize is %d lognum is %d",ndatasize,nlognum);
- if(nlognum < 1)
- {
- return;
- }
- int * plogsize = new int[nlognum];
- std::shared_ptr<int> pplog;pplog.reset(plogsize);
- int i;
- for(i=0;i<nlognum;i++)
- {
- memcpy(&plogsize[i],str + npos,sizeof(int));
- npos = npos + sizeof(int);
- }
- for(i=0;i<nlognum;i++)
- {
- if((npos + plogsize[i])>ndatasize)
- {
- std::cout<<"out range."<<std::endl;
- return;
- }
- iv::log::logdata xlog;
- if(xlog.ParseFromArray(str+npos,plogsize[i]))
- {
- qint64 mstime = xlog.logtime();
- QDateTime datetime = QDateTime::fromMSecsSinceEpoch(mstime);
- // std::cout<<datetime.toString("yyyy-MM-dd hh:mm:ss:zzz ").toLatin1().data()<<" pid is "<<xlog.pid()<<" module name is "<<xlog.modulename()<<" sen is "<<xlog.logsentence()<<std::endl;
- char strout[10000];
- snprintf(strout,10000,"[%s %s %d %d ]: %s \n",xlog.modulename().data(),datetime.toString("yyyy-MM-dd hh:mm:ss:zzz ").toLatin1().data(),
- xlog.pid(),(int)xlog.logclass(),xlog.logsentence().data());
- // qDebug(strout);
- filesave->write(strout,strnlen(strout,10000));
- }
- else
- {
- std::cout<<"parse error."<<std::endl;
- }
- npos = npos +plogsize[i];
- }
- }
|