mainwindow.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. setWindowTitle("ivlog_totxt");
  9. }
  10. MainWindow::~MainWindow()
  11. {
  12. delete ui;
  13. }
  14. void MainWindow::on_pushButton_clicked()
  15. {
  16. QString strilg = QFileDialog::getOpenFileName(this,"ivlog file",".","*.ilg");
  17. if(strilg.isEmpty())return;
  18. QString strtxt = QFileDialog::getSaveFileName(this,"txt file",".","*.txt");
  19. if(strilg.isEmpty())return;
  20. if(strtxt.right(4) != ".txt")
  21. {
  22. strtxt.append(".txt");
  23. }
  24. totxt(strilg,strtxt);
  25. }
  26. void MainWindow::totxt(QString strilg, QString strtxt)
  27. {
  28. QFile fileilg,filetxt;
  29. fileilg.setFileName(strilg);
  30. filetxt.setFileName(strtxt);
  31. if(!fileilg.open(QIODevice::ReadOnly))
  32. {
  33. QMessageBox::warning(this,"totxt","open log file failed",QMessageBox::Yes);
  34. return;
  35. }
  36. if(!filetxt.open(QIODevice::ReadWrite))
  37. {
  38. QMessageBox::warning(this,"totxt","open txt file failed",QMessageBox::Yes);
  39. fileilg.close();
  40. return;
  41. }
  42. int npos = 0;
  43. int nfilesize = fileilg.size();
  44. char strhead[4+ sizeof(int)];
  45. int * pdatalen = (int *)(strhead+4);
  46. char strmark[5];
  47. strmark[4] = 0;
  48. while(npos < nfilesize)
  49. {
  50. if(fileilg.read(strhead,4+sizeof(int)) == (4+sizeof(int)))
  51. {
  52. }
  53. else
  54. {
  55. std::cout<<" read head error. pos is "<<npos<<std::endl;
  56. break;
  57. }
  58. npos = npos + 4 + sizeof(int);
  59. memcpy(strmark,strhead,4);
  60. if(strncmp(strmark,"ilog",4) != 0)
  61. {
  62. std::cout<<"mark error. mark is "<<strmark<<std::endl;
  63. break;
  64. }
  65. int ndatasize = *pdatalen;
  66. if(ndatasize < 1)
  67. {
  68. std::cout<<"datasize error. datasize is "<<ndatasize<<std::endl;
  69. break;
  70. }
  71. char * str = new char[ndatasize];
  72. std::shared_ptr<char> pstr; pstr.reset(str);
  73. memcpy(str,strhead,4+sizeof(int));
  74. int nneedread = ndatasize - 4 - sizeof(int);
  75. if(fileilg.read(str+4+sizeof(int),nneedread) != nneedread)
  76. {
  77. std::cout<<"need read error. "<<nneedread<<std::endl;
  78. break;
  79. }
  80. SaveAMsg(str,ndatasize,&filetxt);
  81. npos = npos + nneedread;
  82. }
  83. filetxt.close();
  84. }
  85. void MainWindow::SaveAMsg(char *str, int nsize, QFile * filesave)
  86. {
  87. int ndatasize;
  88. int npos = 4;
  89. memcpy(&ndatasize,str+npos,sizeof(int));npos = npos + sizeof(int);
  90. if(ndatasize != nsize)
  91. {
  92. qDebug("commicate error");
  93. return;
  94. }
  95. int nlognum;
  96. memcpy(&nlognum,str+npos,sizeof(int));npos = npos +sizeof(int);
  97. // qDebug("datasize is %d lognum is %d",ndatasize,nlognum);
  98. if(nlognum < 1)
  99. {
  100. return;
  101. }
  102. int * plogsize = new int[nlognum];
  103. std::shared_ptr<int> pplog;pplog.reset(plogsize);
  104. int i;
  105. for(i=0;i<nlognum;i++)
  106. {
  107. memcpy(&plogsize[i],str + npos,sizeof(int));
  108. npos = npos + sizeof(int);
  109. }
  110. for(i=0;i<nlognum;i++)
  111. {
  112. if((npos + plogsize[i])>ndatasize)
  113. {
  114. std::cout<<"out range."<<std::endl;
  115. return;
  116. }
  117. iv::log::logdata xlog;
  118. if(xlog.ParseFromArray(str+npos,plogsize[i]))
  119. {
  120. qint64 mstime = xlog.logtime();
  121. QDateTime datetime = QDateTime::fromMSecsSinceEpoch(mstime);
  122. // 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;
  123. char strout[10000];
  124. snprintf(strout,10000,"[%s %s %d %d ]: %s \n",xlog.modulename().data(),datetime.toString("yyyy-MM-dd hh:mm:ss:zzz ").toLatin1().data(),
  125. xlog.pid(),(int)xlog.logclass(),xlog.logsentence().data());
  126. // qDebug(strout);
  127. filesave->write(strout,strnlen(strout,10000));
  128. }
  129. else
  130. {
  131. std::cout<<"parse error."<<std::endl;
  132. }
  133. npos = npos +plogsize[i];
  134. }
  135. }