// UnimesParser.cpp #include #include "UnimesParser.hpp" namespace NGBW { // UnimesParser bool UnimesParser::Parse(FastaRecord &record) { record.clear(); if (m_line == NULL) ReadNextLine(); while (1) { if (m_input.Eof()) return false; if (m_line[0] == '>') { ParseHeader(record); break; } ReadNextLine(); } while (1) { if (m_input.Eof() || m_line[0] == '>') break; record.sequence.append(m_line); ReadNextLine(); } return true; } void UnimesParser::ParseHeader(FastaRecord &record) { size_t length = std::strlen(m_line); size_t last = FindFirstSpace(1); if (last == std::string::npos) last = length; record.identity.assign(m_line + 1, last - 1); if (last < length) { size_t first = last + 1; const char *sub_string = std::strstr(m_line + first, " OS="); if (sub_string != NULL) { last = sub_string - m_line; record.description.assign(m_line + first, last - first); first = last + 4; sub_string = std::strstr(m_line + first, " Pep="); if (sub_string != NULL) last = sub_string - m_line; else last = length; record.organism.assign(m_line + first, last - first); } } ReadNextLine(); } } // namespace NGBW