设为首页 加入收藏

TOP

一个基于QT的解析interproscan结果的C++成员函数(一)
2015-11-21 01:42:02 来源: 作者: 【 】 浏览:0
Tags:一个 基于 解析 interproscan 结果 成员 函数

结构域预测软件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<PfamToMyDBDlg继承自QDialog,也一并给出
 

#ifndef PFAMTOMYDBDLG_H
#define PFAMTOMYDBDLG_H

#include 
#include 
#include 
#include 
#include 

class PfamToMyDBDlg : public QDialog
{
    Q_OBJECT
public:
    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 
#include 
#include 
#include 
#include 
#include 
#include 

PfamToMyDBDlg::PfamToMyDBDlg(QWidget *parent) :
    QDialog(parent)
{
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++循环顺序队列 下一篇MongoDB(1)--简介以及安装

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: