From 4692855d75e90b1b362b01f68d7d369dd251acc0 Mon Sep 17 00:00:00 2001 From: marco <marco@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 19 Aug 2010 11:33:41 +0000 Subject: [PATCH] make fasta parser more robust by skipping whitespace characters Fixes part of BZDNG-152 git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2658 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/io/src/seq/fasta_io_handler.cc | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/modules/io/src/seq/fasta_io_handler.cc b/modules/io/src/seq/fasta_io_handler.cc index 919902088..198171208 100644 --- a/modules/io/src/seq/fasta_io_handler.cc +++ b/modules/io/src/seq/fasta_io_handler.cc @@ -92,17 +92,22 @@ void FastaIOHandler::Import(seq::SequenceList& aln, String error=str(format(error_msg) % line); throw IOException(error); } - String identifier=line.substr(1); - String sequence_str; - while (std::getline(instream, line) && line.size()>0 && line[0]!='>') { - if (line.find_first_not_of("\n\t ")==String::npos) { - continue; + String name=line.substr(1); + std::stringstream seq_string; + while (std::getline(instream, line)) { + if (!line.empty() && line[0]=='>') { + break; } - sequence_str+=line; - } - if (sequence_str.length()>0) { + for (String::iterator i=line.begin(), e=line.end(); i!=e; ++i) { + if (isspace(*i)) { + continue; + } + seq_string << *i; + } + } + if (!seq_string.str().empty()) { try { - seq::SequenceHandle seq=seq::CreateSequence(identifier, sequence_str); + seq::SequenceHandle seq=seq::CreateSequence(name, seq_string.str()); aln.AddSequence(seq); seq_count+=1; } catch (seq::InvalidSequence& e) { -- GitLab