int main(void) { // Test the fastareader string filename = "/home/laozzzzz/barcode_project/reads/e_coli_10000snp.fa"; bool done = false; bool success = false; Sequence read; std::unique_ptr<SequenceReader> reader(FastaReader::CreateSequenceReader(filename)); while(!success) { reader->NextRead(read, success, done); cout<< read.fowardSeq() <<endl; } read.clear(); filename = "/home/laozzzzz/barcode_project/reads/1000.fq"; done = false; success = false; reader.reset(FastqReader::CreateSequenceReader(filename)); while(!success) { reader->NextRead(read, success, done); cout<< read.fowardSeq() <<endl; } return 0; }
void FastaReader::NextRead(Sequence &r, bool &success, bool &done) { if (!r.empty()) r.clear(); int c; success = false; done = false; // Pick off the first at if(this->first_) { c = fHandler_->get(); if(c != '>') { c = fHandler_->getPastNewline(); if(c < 0) { r.clear();success = false; done = true; } } if(c != '>') { std::cerr << "Error: reads file does not look like a FASTA file" << std::endl; throw 1; } assert_eq('>', c); first_ = false; } // Read to the end of the id line, sticking everything after the '>' // into *name string& id = r.id(); while(true) { c = fHandler_->get(); if(c < 0) { r.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTA file" << std::endl; throw 1; } if(c == '\n' || c == '\r') { // Break at end of line, after consuming all \r's, \n's while(c == '\n' || c == '\r') { c = fHandler_->get(); if(c < 0) { r.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTA file" << std::endl; throw 1; } } break; } if(c == '>') continue; id += c; //name.append(c); } // fb_ now points just past the first character of a // sequence line, and c holds the first character BTDnaString& sbuf = r.fowardSeq(); while(true){ c = toupper(c); if(c < 0){ r.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTA file" << std::endl; throw 1; } else{ if(c == '\n' || c == '\r') { break; } sbuf.append(asc2dna[c]); c = fHandler_->get(); } } success = true; done = fHandler_->eof(); is_done_ = done; }
void fastqPattern::parseImp(Sequence& read, bool& success, bool& done){ char c; success = false; done = false; // Pick off the first at if(this->first_) { c = this->fb_->get(); if(c != '@') { c = this->fb_->getPastNewline(); if(c < 0) { success = false; done = true; } line_num_ += 1; } if(c != '@') { std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } assert_eq('@', c); first_ = false; } // Read to the end of the id line, sticking everything after the '@' // into id std::string& id = read.id(); while(true) { c = this->fb_->get(); if(c == '@') continue; if(c < 0) { read.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } if(c == '\n' || c == '\r') { // Break at end of line, after consuming all \r's, \n's while(c == '\n' || c == '\r') { c = this->fb_->get(); if(c < 0) { read.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } } line_num_ += 1; break; } id += c; } // fb_ now points just past the first character of a // sequence line, and c holds the first character //BTDnaString& sbuf = r->fowardSeq(); std::string& sequence = read.fowardSeq(); while(true){ c = toupper(c); if(c < 0){ read.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } else{ if(c == '\n' || c == '\r') { // Break at end of line, after consuming all \r's, \n's while(c == '\n' || c == '\r') { c = this->fb_->get(); if(c < 0) { read.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } } line_num_ += 1; break; } // convert N to A if(toupper(c) == 'N') c = 'A'; sequence += c; c = this->fb_->get(); } } assert_eq('+', c); // skip the option sequence at '+' line c = this->fb_->getPastNewline(); line_num_ += 1; if(c <0){ read.clear(); success = false; done = true; std::cerr << "Error: reads file does not look like a FASTQ file" << std::endl; throw 1; } string& qual = read.quality(); while(true){ qual += c; c = this->fb_->get(); if(c == '\n' || c == '\r') break; } line_num_ += 1; success = true; assert(qual.length() == sequence.length()); done = fb_->eof(); }