在C ++中搜索fasta文件

时间:2014-02-28 04:31:29

标签: c++ string search fasta

我是C ++的新手,需要一些我的代码帮助(主要是从我找到的其他代码中获取)。我正在尝试读取序列的FASTA文件,然后在文件中搜索特定的主题,然后将结果输出到另一个文件中。我可以打开文件,搜索文件,然后输出图案出现的行。我也得到序列号和字符位置。

但是我想要整个序列,而不仅仅是线条。我想有一种方法可以运行一个循环来打印出>之间的所有内容,这标志着每个序列的开头。我只是无法做到,并且非常感谢我能得到任何帮助

以下是我要搜索的文件示例:

所以,如果我正在搜索“PAIVGGDFHLSETIAIIRYLA”,我会想要从第一个>(我想包括这个)到下一个>(不想包括这个)的所有内容。 >我发布这篇文章时没有出现,但他们会在FB之前......

>FBpp0087549
MSKPIRFYYDLLSPIARGLWIGLKFSNSPVEYCPIALRKFEQLTDEYKKI
NRFQKV**PAIVGGDFHLSETIAIIRYLA**DKGQFDEKLYPKTLENRARVDEF
LEWQHLNIRLACSMYFRDAWLFPMNGIAPKPKPEQIQALIEGVENNLGLL
ERLWLENDFLVGKNLTMADILGSSEINQLRLCQYRVDEKKFPKVVKWLER
VRVSANPYHDEGLTFIDRKSKQSTAAKL

>FBpp0086857
MSQPKPILYYDERSPPVRSCLMLIKLLDIDVELRFVNLFKGEQFQKDFLA
LNPQHSVPTLVHGDLVLTDSHAILIHLAEKFDEGGSLWPQEHAERMKVLN
LLLFECSFLFRRDSDFMSATVRQGFANVDVAHHERKLTEAYIIMERYLEN
SDFMAGPQLTLADLSIVTTLSTVNLMFPLSQFPRLRRWFTAMQQLDAYEA
NCSGLEKLRQTMESVGSFQFPSSSAVVTEKVE

以下是我正在使用的代码:

#include <fstream>
#include <string>
#include <iostream>
#include <ctime>
#include <stdlib.h>

using namespace std;

int main()
{
    int counter = 0;

    string filename = "dna.txt";
    ifstream gst(filename.c_str());

    ofstream outfile;
    outfile.open("dnatwo.txt");

    outfile.setf(ios::fixed);
    outfile.setf(ios::showpoint);
    //outfile.precision(100);


    if (gst)
    {
        string search;
        string line;
        string number;
        gst >> number;

        search.resize(25);

        cout << "Enter the search criteria: ";
        cin >> search;

        while (getline(gst, line))
        {
            if (number == search);
            counter = counter += 1;

            if (line.find(search) != std::string::npos)
            {
                //outfile << line << endl;
            }
            std::size_t found = line.find(search);
            if (found != std::string::npos)
                outfile << "found at line: " << counter << " " << "Position: " << found << " " << line
                << "\r\n" << endl;

        }
    }
    else

    {
        cerr << "Cannot open file " << filename << endl;
        return -1;
    }

    return 0;
}

我确信这对很多人来说非常简单,但我不是其中之一。

0 个答案:

没有答案