#include "sdatadlg.h" #include "stable.h" #include "mainwindow.h" #include #include #include #include #define D_NOT_SELECT -1 SDataDlg::SDataDlg() { setWidgets(); } SDataDlg::~SDataDlg() { } void SDataDlg::setWidgets() { setWindowTitle("Data"); m_ptab = new QTabWidget; QVBoxLayout *vlayout = new QVBoxLayout; vlayout->addWidget(m_ptab); setLayout(vlayout); m_ptab->setTabsClosable(true); connect(m_ptab,SIGNAL(tabCloseRequested(int)),this,SLOT(CloseTab(int))); connect(m_ptab,SIGNAL(tabBarDoubleClicked(int)),this,SLOT(DoubleClickTab(int))); } QTableWidget *SDataDlg::AddTable(QString _str) { STable *pTable = new STable; m_ptab->addTab(pTable,_str); return (QTableWidget *)pTable; } void SDataDlg::CloseTab(int index) { ((STable*)(m_ptab->widget(index)))->clear(); m_ptab->removeTab(index); } void SDataDlg::DoubleClickTab(int index) { bool ok; if (index < 0) return; QString text = QInputDialog::getText(this,"Tab name change","Name : ", QLineEdit::Normal,m_ptab->tabText(index), &ok); if (ok) { m_ptab->setTabText(index,text); } } void SDataDlg::DataReload(QString _strTableName,int _nSelect) { QString strSelect; strSelect = "select "; QVector column = GetColumn().data(); foreach(QStringList strlist,column) strSelect += "CONVERT(" + strlist.at(SColumn::E_DATABASE) + " USING utf8),"; strSelect = strSelect.left(strSelect.size()-1); strSelect += " from "; strSelect += _strTableName; if (_nSelect == STable::E_ARTICLE_BODY) strSelect += " WHERE article_form = 'body'"; if (_nSelect == STable::E_ARTICLE_REPLY) strSelect += " WHERE article_form = 'reply'"; QSqlQuery query(strSelect); STable *pTable = (STable *)m_ptab->currentWidget(); if (pTable == NULL) pTable = (STable*)AddTable(""); pTable->setArticleSelect(_nSelect); pTable->clear(); pTable->SetHeaderList(&column,SColumn::E_NAME); pTable->setRowCount(query.size()); GetMainWindow()->m_progress.setRange(0,query.size()); int nCount = 0; while (query.next()) { for (int i = 0; i < pTable->columnCount() ; i++) { QString str = query.value(i).toString().replace("\n"," "); if((i == GetColumn().getColumnIndex("platform_form")) && (str.trimmed() == "post" || str.trimmed() == "channel" || str.trimmed() == "story")) str = "sns"; if((i == GetColumn().getColumnIndex("platform_form")) && (str.trimmed() == "group")) str = "community"; pTable->setItem(nCount,i,new STableWidgetItem(" "+str.replace("\t"," ")+" ")); } nCount++; GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } } void SDataDlg::InsertCopyRow(int _nRow,QTableWidget *_pCurrent,QTableWidget *_pNew) { _pNew->setRowCount(_pNew->rowCount()+1); for (int nCount = 0;nCount < _pCurrent->columnCount() ;nCount++ ) _pNew->setItem(_pNew->rowCount()-1,nCount,new STableWidgetItem(*_pCurrent->item(_nRow,nCount))); } void SDataDlg::SearchDate(QDate _dtStart,QDate _dtEnd) { STable *pCurrent = (STable *)m_ptab->currentWidget(); if (pCurrent == NULL) return; STable *pNew = new STable; pNew->setArticleSelect(pCurrent->getArticleSelect()); QVector column = GetColumn().data(); pNew->SetHeaderList(&column,SColumn::E_NAME); GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { bool bFlag = false; QString strTime = pCurrent->item(nCount,GetColumn().getDateColumn())->text().trimmed(); if (strTime.size() >= 10) { QChar ch = strTime.at(4); QString strFormat = QString("yyyy")+ch+QString("MM")+ch+QString("dd"); QDate date = QDate::fromString(strTime.left(10),strFormat); if (_dtStart <= date && _dtEnd >= date) bFlag = true; } if (bFlag) InsertCopyRow(nCount,pCurrent,pNew); GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } m_ptab->addTab(pNew,STable::GetArticleType(pCurrent->getArticleSelect())); m_ptab->setCurrentIndex(m_ptab->count()-1); } void SDataDlg::SearchCounter(int _nCatalogIndex,int _nCompIndex,int _nInsDelIndex,int _nCounter) { STable *pCurrent = (STable *)m_ptab->currentWidget(); if (pCurrent == NULL) return; QMap mapData,mapDataResult; GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { QString str; if (_nCatalogIndex == GetColumn().getDateColumn()) str = QDateTime::fromString(pCurrent->item(nCount,_nCatalogIndex)->text().trimmed(),"yyyy-MM-dd hh:mm:ss").date().toString("yyyy-MM-dd"); else str = pCurrent->item(nCount,_nCatalogIndex)->text().trimmed(); if (str.isEmpty() == false) { if(mapData.contains(str)) mapData[str]++; else mapData.insert(str,1); } GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } for(QMap ::iterator iterPos = mapData.begin(); iterPos != mapData.end(); iterPos++) { bool bFlag = false; switch(_nCompIndex) { case E_LENGTH_COMP_GREATER: if (iterPos.value() > _nCounter) bFlag = true; break; case E_LENGTH_COMP_LESS: if (iterPos.value() < _nCounter) bFlag = true; break; case E_LENGTH_COMP_EQUAL: if (iterPos.value() == _nCounter) bFlag = true; break; } if (bFlag) mapDataResult.insert(iterPos.key(), iterPos.value()); } { STable *pNew = new STable; pNew->setArticleSelect(pCurrent->getArticleSelect()); QVector column = GetColumn().data(); pNew->SetHeaderList(&column,SColumn::E_NAME); GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { bool bFlag = false; QString strCurrent = pCurrent->item(nCount,_nCatalogIndex)->text().trimmed(); if(mapDataResult.contains(strCurrent)) bFlag = true; if (_nInsDelIndex == 1) bFlag = !bFlag; if (bFlag) InsertCopyRow(nCount,pCurrent,pNew); GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } m_ptab->addTab(pNew,STable::GetArticleType(pCurrent->getArticleSelect())); m_ptab->setCurrentIndex(m_ptab->count()-1); } } void SDataDlg::SearchLength(int _nCatalogIndex,int _nCompIndex,int _nInsDelIndex,int _nLength) { STable *pCurrent = (STable *)m_ptab->currentWidget(); if (pCurrent == NULL) return; GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); STable *pNew = new STable; pNew->setArticleSelect(pCurrent->getArticleSelect()); QVector column = GetColumn().data(); pNew->SetHeaderList(&column,SColumn::E_NAME); GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { bool bFlag = false; int nCurrentLength = pCurrent->item(nCount,_nCatalogIndex)->text().trimmed().length(); switch(_nCompIndex) { case E_LENGTH_COMP_GREATER: if (nCurrentLength > _nLength) bFlag = true; break; case E_LENGTH_COMP_LESS: if (nCurrentLength < _nLength) bFlag = true; break; case E_LENGTH_COMP_EQUAL: if (nCurrentLength == _nLength) bFlag = true; break; } if (_nInsDelIndex == 1) bFlag = !bFlag; if (bFlag) InsertCopyRow(nCount,pCurrent,pNew); GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } m_ptab->addTab(pNew,STable::GetArticleType(pCurrent->getArticleSelect())); m_ptab->setCurrentIndex(m_ptab->count()-1); } void SDataDlg::SearchReplace(int _nCatalogIndex,int _nReplaceFindIndex,int _nReplaceIndex,QString _strFind,QString _strReplace) { STable *pCurrent = (STable *)m_ptab->currentWidget(); if (pCurrent == NULL) return; STable *pNew = new STable; pNew->setArticleSelect(pCurrent->getArticleSelect()); QVector column = GetColumn().data(); pNew->SetHeaderList(&column,SColumn::E_NAME); GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); //int nCatalog = m_pcbReplaceCatalog->currentIndex(); QStringList strListKeyword; if (_nReplaceFindIndex == E_REPLACE_SPACE) strListKeyword = _strFind.split(" "); else strListKeyword.push_back(_strFind); pNew->setRowCount(pCurrent->rowCount()); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { for (int nColumnCount = 0;nColumnCount < pCurrent->columnCount() ;nColumnCount++ ) { if (_nCatalogIndex == nColumnCount) { QString strOut = pCurrent->item(nCount,nColumnCount)->text(); switch(_nReplaceIndex) { case 0: { foreach(QString str,strListKeyword) strOut = strOut.replace(str,_strReplace); break; } case 1: { QString strMiddle; foreach(QString strLine,strOut.split("\n")) { foreach(QString strWord,strLine.split(" ")) { bool bFlag = false; foreach(QString str,strListKeyword) { if (strWord == str) { strMiddle += _strReplace + " "; bFlag = true; break; } } if (bFlag == false) strMiddle += strWord + " "; } strMiddle += "\n"; } strOut = strMiddle; break; } case 2: QString strMiddle; foreach(QString strLine,strOut.split("\n")) { foreach(QString strWord,strLine.split(" ")) { bool bFlag = false; foreach(QString str,strListKeyword) { if (strWord.contains(str)) { strMiddle += _strReplace + " "; bFlag = true; break; } } if (bFlag == false) strMiddle += strWord + " "; } strMiddle += "\n"; } strOut = strMiddle; break; } pNew->setItem(nCount,nColumnCount,new STableWidgetItem(strOut)); } else pNew->setItem(nCount,nColumnCount,new STableWidgetItem(*pCurrent->item(nCount,nColumnCount))); } GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } //m_ptwData->addTab(pNew,m_ptwData->tabText(m_ptwData->currentIndex())+" r"); m_ptab->addTab(pNew,STable::GetArticleType(pCurrent->getArticleSelect())); m_ptab->setCurrentIndex(m_ptab->count()-1); } int SDataDlg::GetCurrentArticle() { if (m_ptab->count() == 0) return E_ARTICLE_NONE; return ((STable *)m_ptab->currentWidget())->getArticleSelect(); } void SDataDlg::SearchKeyword(QVector _vecKeyword) { STable *pCurrent = (STable *)m_ptab->currentWidget(); if (pCurrent == NULL) return; STable *pNew = new STable; pNew->setArticleSelect(pCurrent->getArticleSelect()); QVector column = GetColumn().data(); pNew->SetHeaderList(&column,SColumn::E_NAME); GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { bool bFlag = false; foreach(SKeyword stKeyword,_vecKeyword) { QString strData = pCurrent->item(nCount,stKeyword.m_nCatalog)->text(); switch(stKeyword.m_nKeyword) { case E_SEARCH_KEYWORD_OR: { foreach(QString strKey , stKeyword.m_strListKeyword) if (strData.contains(strKey)){bFlag = true;break;} break; } case E_SEARCH_KEYWORD_AND: { int nKeyCount = 0; foreach(QString strKey , stKeyword.m_strListKeyword) if (strData.contains(strKey)) nKeyCount++; if (nKeyCount == stKeyword.m_strListKeyword.size()) bFlag = true; break; } case E_SEARCH_KEYWORD_CELL_DELETE_OR: { bFlag = true; foreach(QString strKey , stKeyword.m_strListKeyword) if (strData.contains(strKey)){bFlag = false;break;} break; } case E_SEARCH_KEYWORD_CELL_DELETE_AND: { bFlag = true; int nCount = 0; foreach(QString strKey , stKeyword.m_strListKeyword) if (strData.contains(strKey)){nCount++;} if (nCount == stKeyword.m_strListKeyword.size()) bFlag = false; break; } } } if (bFlag) InsertCopyRow(nCount,pCurrent,pNew); GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } m_ptab->addTab(pNew,STable::GetArticleType(pCurrent->getArticleSelect())); m_ptab->setCurrentIndex(m_ptab->count()-1); } void SDataDlg::Import(QVector _vecImport ) { STable *pNew = new STable; QTextCodec *codec = QTextCodec::codecForName("eucKR"); GetMainWindow()->m_progress.setRange(0,_vecImport.size()); QVector column = GetColumn().data(); int ncRow = 0; bool bFirst = true; pNew->setRowCount(_vecImport.size()); foreach (QByteArray byte,_vecImport) { QString strLine = codec->toUnicode(byte); if (bFirst) { QStringList strings = strLine.split(","); if (strings.at(0) == QString("#Head#")) { pNew->setColumnCount(strings.size()-1); for (int i = 1; i < strings.size();i++) { for(int j = 0; j < column.size(); j++) { if(column.at(j).at(SColumn::E_DATABASE).compare(strings.at(i)) == 0) strings[i] = column.at(j).at(SColumn::E_NAME); } pNew->setHorizontalHeaderItem(i-1,new STableWidgetItem(strings.at(i))); } bFirst = false; pNew->setRowCount(_vecImport.size()-1); continue; } else pNew->setColumnCount(strings.size()); } bFirst = false; strLine = strLine.replace("\"",""); QStringList strings = strLine.split(","); int ncCol=0; foreach(QString str,strings) pNew->setItem(ncRow,ncCol++,new STableWidgetItem(QString(" " + str + " "))); GetMainWindow()->m_progress.setValue(ncRow++); GetMainWindow()->m_progress.repaint(); } m_ptab->addTab(pNew,"import"); m_ptab->setCurrentIndex(m_ptab->count()-1); } void SDataDlg::Export(QString _strFilename) { QFile file(_strFilename); if(!file.open(QFile::WriteOnly | QFile::Text)) return; QTextStream out(&file); QTableWidget *pCurrent = (QTableWidget *)m_ptab->currentWidget(); out << "#Head#,"; QVector column = GetColumn().data(); foreach(QStringList strList,column) out << strList.at(SColumn::E_DATABASE) << ","; out << endl; GetMainWindow()->m_progress.setRange(0,pCurrent->rowCount()-1); for (int nCount = 0 ; nCount < pCurrent->rowCount(); nCount++ ) { for (int nColumnCount = 0;nColumnCount < pCurrent->columnCount() ;nColumnCount++ ) { QString str = pCurrent->item(nCount,nColumnCount)->text(); str = str.replace(",","."); str = str.replace("\n",""); out << "\"" << str << "\"" << ","; } out << "\"\"" << endl; GetMainWindow()->m_progress.setValue(nCount); GetMainWindow()->m_progress.repaint(); } file.close(); }