i have text file follows:
05:59:57 - [0x1010001]05:59:57 - (2576) writing non-volatile memory done 06:00:00 - [0x1010001]06:00:00 - (23371) t_check_buddy !!! 06:00:00 - dma:310127952,01,req:brdtim 82 07 83 29 05 0f 04 12 06 00 06:00:00 - 06:00:00 - evmtbl............ 06:00:00 - maintenancing & filling vboxtbl...done 06:00:01 - dma:310128070,01,ind:ktsper 96 10 85 fc 00 28 58 06:00:01 - dma:310128071,01,req:ktsidk 82 10 85 fc 81 00 47 02 06:00:01 - dma:310128091,01,ind:ktsper 96 10 86 fc 00 28 58 06:00:01 - dma:310128091,01,req:ktsidk 82 10 86 fc 81 00 47 02 06:00:02 - sip:310129384, req: kinfo to:1800 to-host:192.168.178.230 ktext: 02 78 0e 06:00:30 - [0x1010001]06:00:30 - (23371) t_check_buddy !!! 06:00:32 - sip:310159385, req: kinfo to:1800 to-host:192.168.178.230 ktext: 02 78 0e 06:00:46 - ipt:310173571,255,ind: config 87 03 4c 43 4e the code follows:
#include "mainwindow.h" #include "ui_mainwindow.h" #include <fstream> #include <iostream> #include <string> #include <sstream> #include<qfile> #include<qtextstream> #include<qstringlist> #include<qdebug> #include<qmessagebox> using namespace std; mainwindow::mainwindow(qwidget *parent) : qmainwindow(parent), ui(new ui::mainwindow) { ui->setupui(this); } mainwindow::~mainwindow() { delete ui; } i performed button , lineedits in form.after, splitted time ranges hh:mm:ss format.because have error checking on time ranges.
void mainwindow::on_pushbutton_3_clicked() { qstring output; qstring line; qstringlist splitted; qstring times; int sayac1=0,sayac2=0; bool control1=false; bool control2=false; qstring firsttime=ui->lineedit->text(); //first time range entered user. qstringlist list1=firsttime.split(":"); //girilen time split edildi. if (list1.size() < 3) qmessagebox::warning(this,"list","alanlar boŞ birakilamaz!"); qstring hour1=list1[0]; hour1.toint(); qstring minute1=list1[1]; minute1.toint(); qstring second1=list1[2]; second1.toint(); qstring secondtime=ui->lineedit_2->text(); //second time range entered user. qstringlist list2=secondtime.split(":"); //girilen aralık split edildi. if(list2.size() < 3) qmessagebox::warning(this,"list","alanlar boŞ birakilamaz!"); qstring hour2=list2[0]; hour2.toint(); qstring minute2=list2[1]; minute2.toint(); qstring second2=list2[2]; second2.toint(); i read text file , splitted file.i have need compare time ranges in text file time ranges entered user.
qfile file("c:\\kaynak\\naile.txt"); if(file.open(qiodevice::readonly | qiodevice::text)){ qtextstream in(&file); while(!in.atend()) { line = in.readline()+"\n"; output.append(line); if(line.contains(" - ")){ splitted=line.split(" - "); times=times+" "+splitted[0]; } if(splitted[0]!=firsttime && control1==false){ sayac1 = sayac1+1; } else control1=true; if(splitted[0]!=secondtime && control2==false){ sayac2++; } else control2=true; } in following code,i did error checking mentioned above.and,i tried display records @ specified time intervals.but when run code,nothing seems in textbrowser created display records.i don't understand why happening.also,no error occurs.for example,user entered 05:59:57 first lineedit , 06:00:46 second lineedit.then user clicked button display records @ time intervals.i want display records 05:59:57 06:00:46.but,there no records in textbrowser.nothing seems.how can solve problem?
if(hour1<=hour2){ int i; qstring list; qstring newline=splitted[0]+" - "+splitted[1]; list.append(newline); if(times.contains(firsttime) && times.contains(secondtime)){ for(i=sayac1+1;i<=sayac2+1;i++){ ui->textbrowser_3->settext(list.at(i)); } } else qmessagebox::warning(this,"list","gİrdİĞİnİz zaman araliklari eŞleŞmİyor!"); } if(hour1>hour2) qmessagebox::warning(this,"list","İkİncİ saat bİrİncİden bÜyÜk olamaz!"); file.close(); // return output; } }
to compare times must use qtime class, class provides implements time comparison operators. along advisable use qtimeedit provides suitable widget these parameters recommend change them instead of using qlineedit.
an appropriate format has established, following done:
#define format "hh:mm:ss" mainwindow::mainwindow(qwidget *parent) : qmainwindow(parent), ui(new ui::mainwindow) { ui->setupui(this); ui->fromtimeedit->setdisplayformat(format); ui->totimeedit->setdisplayformat(format); ui->totimeedit->settime(qtime::fromstring("23:59:59", format)); } then in slot called when press button task of filtering times, checks if limits adequate. after read file , first 8 characters convert in time , if valid , between times change flag, if instead not valid leave was, of above implemented in following code:
void mainwindow::on_pushbutton_clicked() { const qtime = ui->fromtimeedit->time(); const qtime = ui->totimeedit->time(); bool copylog = false; if(from <= to){ qfile file("/path/of/kaynak.log"); ui->textedit->clear(); if(file.open(qiodevice::readonly | qiodevice::text)){ qtextstream in(&file); while(!in.atend()){ const qstring line = in.readline(); const qtime timelog = qtime::fromstring(line.left(8), format); if(timelog.isvalid()){ copylog = timelog >= && timelog <= to; } if(copylog){ ui->textedit->append(line); qapplication::processevents(); } } } } } the following image shows result:
the complete example can found in following link

Comments
Post a Comment