一个基于QT的解析interproscan结果的C++成员函数
来源:互联网 发布:pages for windows 编辑:程序博客网 时间:2024/04/30 22:20
结构域预测软件interproscan提供多种输出格式,出于后期分析的需要,选用了gff3格式。我比较喜欢结合数据库进行分析,所以先要把数据导入数据库。
我之前用QT写好了界面,所以只要在菜单里添加一个QAction、再在主窗口类中添加槽函数就可以了。这里给出我解析文件的槽函数。
void MainWindow::on_interproToMyDB(){ PfamToMyDBDlg * dbDlg = new PfamToMyDBDlg(this); dbDlg->exec(); QFile qinFile(dbDlg->filename.toStdString().c_str());// QFile qinFile("mypfam.gff3"); QStringList fullpath = dbDlg->filename.split(QRegExp("/")); QString path; for(int i = 0; i < fullpath.size() - 1; i++){ path.append(fullpath[i]); path.append("/"); }// QMessageBox::information(this, "ERROR2", path); //QFile qoutFile( "a2.sql"); QFile qoutFile( path+dbDlg->name+".sql");// QMessageBox::information(this, "ERROR3", dbDlg->filename.toStdString().c_str());// QMessageBox::information(this, "ERROR4", dbDlg->name); if (!qoutFile.open(QIODevice::ReadWrite | QIODevice::Text)) { QMessageBox::information(this, "ERROR1", "failed to open"); return; } if(!qinFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::information(this, "ERROR2", "failed to open"); return ; } QTextStream myTextStream(&qoutFile); while (!qinFile.atEnd()) { QByteArray line = qinFile.readLine(); line[line.size()-1]='\0'; QString str(line); if(str[0]=='#'||str.size() == 0) { continue; } if(!str.startsWith("WP_")){ break; } QStringList sections = str.split(QRegExp("\t")); if(!sections[sections.size()-1].startsWith("Name")){ continue; } QStringList sections2 = sections[sections.size()-1].split(QRegExp(";")); QStringList sections3 = sections2[2].split(QRegExp(" ")); QString SQL; if(sections3.size() != 3 || sections2.size() != 6 ||\ !sections3[0].startsWith("Target=") || \ !sections2[0].startsWith("Name") ||\ !sections2[1].startsWith("signature_desc") ||\ !sections2[3].startsWith("status")||\ !sections2[4].startsWith("ID")||\ !sections2[5].startsWith("date")\ ){ QMessageBox::warning(this, "ERROR", QString("format is wrong here, please add manully:\n")+sections[sections.size()-1].toStdString().c_str()); continue; } SQL.sprintf("insert into res_smart(Name, signature_desc, Target,start , stop, status, ID_SEQ, date, Uid)values(\"%s\", \"%s\", '%s', '%s' , '%s', '%s', '%s', '%s',(select Id from project_abbr where name = '%s'));", \ sections2[0].split(QRegExp("="))[1].toStdString().c_str() ,\ sections2[1].split(QRegExp("="))[1].toStdString().c_str() ,\ sections3[0].split(QRegExp("="))[1].toStdString().c_str() ,\ sections3[1].toStdString().c_str() ,\ sections3[2].toStdString().c_str() ,\ sections2[3].split(QRegExp("="))[1].toStdString().c_str() ,\ sections2[4].split(QRegExp("="))[1].toStdString().c_str() ,\ sections2[5].split(QRegExp("="))[1].toStdString().c_str() ,\ dbDlg->name.toStdString().c_str()); myTextStream<<SQL<<'\n'; } qoutFile.close(); qinFile.close();}PfamToMyDBDlg继承自QDialog,也一并给出
#ifndef PFAMTOMYDBDLG_H#define PFAMTOMYDBDLG_H#include <QDialog>#include <QPushButton>#include <QLineEdit>#include <QLabel>#include <QComboBox>class PfamToMyDBDlg : public QDialog{ Q_OBJECTpublic: QString filename; QString name;public: explicit PfamToMyDBDlg(QWidget *parent = 0);private: QLabel *filenameLabel, *nameLabel; QLineEdit *filenameEdit, *nameEdit; QPushButton *openFileBtn, *exeBtn; QComboBox *nameComBox;signals:public slots: void on_openFile(); void on_exe();};#endif // PFAMTOMYDBDLG_H
#include "pfamtomydbdlg.h"#include <QHBoxLayout>#include <QVBoxLayout>#include <QMessageBox>#include <QFont>#include <QString>#include <QFileDialog>#include <QDebug>PfamToMyDBDlg::PfamToMyDBDlg(QWidget *parent) : QDialog(parent){ QVBoxLayout * globalLayout = new QVBoxLayout; QHBoxLayout * filenameLayout = new QHBoxLayout; QHBoxLayout * nameLayout = new QHBoxLayout; filenameLabel = new QLabel(tr("Filename")); QFont * myFont = new QFont; myFont->setBold(true); myFont->setPointSize(24); filenameLabel->setFont(*myFont); filenameLabel->setStyleSheet("color:red"); filenameEdit = new QLineEdit; openFileBtn = new QPushButton("open"); connect(openFileBtn, SIGNAL(clicked()),this, SLOT(on_openFile())); nameLabel = new QLabel(tr("name")); nameLabel->setFont(*myFont); nameLabel->setStyleSheet("color:red"); nameEdit = new QLineEdit; nameComBox = new QComboBox; nameComBox->setEditable(true); nameComBox->addItem("Cytophaga hutchinsonii"); nameComBox->addItem("Dyadobacter fermentans"); nameComBox->addItem("Dyadobactor tibetensis"); nameComBox->addItem("Fibrella aestuarina"); nameComBox->addItem("Fibrisome limi"); nameComBox->addItem("Fibrobacter succinogenes"); nameComBox->addItem("Runella slithyformis"); nameComBox->addItem("Leadbetterella byssophilla"); nameComBox->addItem("Sporocytophaga myxococcoides"); nameComBox->addItem("Spirosoma linguale"); exeBtn = new QPushButton("execute"); connect(exeBtn, SIGNAL(clicked()), this, SLOT(on_exe())); filenameLayout->addWidget(filenameLabel); filenameLayout->addWidget(filenameEdit); filenameLayout->addWidget(openFileBtn); nameLayout->addWidget(nameLabel); nameLayout->addWidget(nameComBox); globalLayout->addLayout(filenameLayout); globalLayout->addLayout(nameLayout); globalLayout->addWidget(exeBtn); this->setLayout(globalLayout);}void PfamToMyDBDlg::on_exe(){ filename = filenameEdit->text().trimmed();name = nameComBox->currentText().trimmed();//qDebug() << name; this->close();}void PfamToMyDBDlg::on_openFile(){ QString temp = QFileDialog::getOpenFileName(this, "open", "c:/desktop/", "files(*.*)"); filenameEdit->setText(temp);}
要提取的部分不包括后面的序列。中间部分的特点是以换行符区分不同字段,所以如果不做复杂分析的话,可以将这部分结果直接拷贝到excel进行分析。
0 0
- 一个基于QT的解析interproscan结果的C++成员函数
- vector的成员函数解析
- deque成员函数的解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- vector的成员函数解析
- 基于Qt的xml解析
- android PullToRefresh
- 黑马程序员——Java之集合框架(二)
- Linux下的I2C总线驱动
- Android基本控件和容器之间继承关系概览图
- QuickAction
- 一个基于QT的解析interproscan结果的C++成员函数
- myeclipse 核心快捷键
- Struts2的方法验证
- [bzoj3343]教主的魔法
- git
- (3-3)Hadoop的Linux的IP、网络配置
- 第三周项目1-三角形1
- SliddingMenu
- HDU 1176 免费馅饼