读取FASTA文件时缺少最后一个字符[c++]



我正在写这个程序,它读取一个fasta文件来做一些事情。fasta文件的格式如下:

> This line with ">" is the header, want to skip/ignore this line
These lines below the header has sequence information we want
ATTGGTATGATTTACCCAATTTGGGGAAAAAATTCCCTCTCGATAGCTATCCTGATTTGCGG
ATTGGTATGATTTACCCAATTTGGGGAAAAAATTCCCTCTCGATAGCTATCCTGATTTGCGG
ATTGGTATGATTTACCCAATTTGGGGAAAAAATTCCCTCTCGATAGCTATCCTGATTTGCGG

理想情况下,我应该在fasta文件中读取跳过标题行并将下面的序列输入到字符串中。我的代码做到了这一点,除了在最后一个字符的末尾。在上面的例子中,除了最后一行的最后一个G之外,所有的东西都将被添加。下面是我的代码和一个示例文件:

void reading_in_RNA_file()
{
string RNA_file = "sample_query.txt";
ifstream fin;
fin.open(RNA_file);
if (!fin.is_open())
{//if
cerr << "Error did not open file" << endl;
exit(1);
}//if
string line = "";
string RNA_seq = "";
string FASTA_heading = "";
string sequence = "";
while(getline(fin,line))
{
if( line.empty() || line[0] == '>' )
{ // Identifier marker
if(!FASTA_heading.empty() )
{ // Print out what we read from the last entry
FASTA_heading.clear();
RNA_seq += sequence;
}
if( !line.empty() )
{
FASTA_heading = line.substr(1);
}
sequence.clear();
}
else if(!FASTA_heading.empty())
{
line = line.substr(0, line.length() -1);
if(line.find(' ') != string::npos )
{ // Invalid sequence--no spaces allowed
FASTA_heading.clear();
sequence.clear();
}
else
{
sequence += line;
}
}
}
if(!FASTA_heading.empty() )
{ // Print out what we read from the last entry
RNA_seq += sequence;
}
cout << RNA_seq << endl;
}

sample_query.txt快速文件!

> true positive test query
GTCTGAGAAAACAAGGCTAGAGATTCCAATATTAGAGACAACAGGGCTCTGGGAAGATTAAGGTTGAGTT
TTCTGGATCTGCAGAATAGAGTCACTGAGGACCAATTGCAAGATCAGAGGAGATGAAAGAACAAGTCAAG
GCATGCTTAGGAAAAGAGAATATCAGGGATAGGTTTTAGGCAAGAGTCACACTGAGGAAGGGCAGGTTCT
ACATACAGTTTATCTTGGTACTGCCAAGTACCATTTGGGTCAGGATTTTGTCATTTAGATCCATATTTTT
CCTATATTTTTATCTGGTTCTTCCATCAGTTACTGAGAGAGCACTATTAATTCACCAGCTATAATTTTGG
ATTGTCAATTTCCTGCTTTTGTCTGTTGTTTTTGATTCACATACTTTGAGGCTCTGTGTGTGTGTGTAAT
有人知道为什么我有这个问题吗?

错误似乎在这里

line = line.substr(0, line.length() -1);

显然,这将从line中删除最后一个字符(顺便说一下,line.pop_back()是一种更简单,更有效的方法)。

我猜你的印象是getline在它读取的字符串中留下换行符,并且你试图删除该换行符。但这不是真的,getline确实读取换行符,但不将换行符包含在它返回的字符串中。

似乎你丢失了每一行的"G"。这可能与下面的方法有关,

line = line。substr(0,。长度()1);

line = line。substr(0,。长度());

请参考下面的官方样本,

https://cplusplus.com/reference/string/string/substr/

如果不是这样,请告诉我。

相关内容

  • 没有找到相关文章

最新更新