NestedInteger deserialize(istringstream &in) { int number; if(in>>number) return NestedInteger(number); //如果开头是数字,那么一定是单个数的 in.clear(); in.get(); NestedInteger list; while(in.peek() != ']') { list.add(deserialize(in)); if(in.peek()==',') in.get(); } in.get(); return list; }
string get(istringstream & in) { while(true) { while(in.get()=='\"') { string result; char buf; while(true) { buf=in.get(); if(buf=='\"') { in.get(); return result; } result+=buf; } } } }
//******************************************************************************************************************** //this function will jump over commented out sequences, but if the last sequence in a file is commented out it makes a blank seq Sequence::Sequence(istringstream& fastaString){ try { m = MothurOut::getInstance(); initialize(); name = getSequenceName(fastaString); if (!m->control_pressed) { string sequence; //read comments while ((name[0] == '#') && fastaString) { while (!fastaString.eof()) { char c = fastaString.get(); if (c == 10 || c == 13){ break; } } // get rest of line if there's any crap there sequence = getCommentString(fastaString); if (fastaString) { fastaString >> name; name = name.substr(1); }else { name = ""; break; } } //while (!fastaString.eof()) { char c = fastaString.get(); if (c == 10 || c == 13){ break; } } // get rest of line if there's any crap there comment = getCommentString(fastaString); int numAmbig = 0; sequence = getSequenceString(fastaString, numAmbig); setAligned(sequence); //setUnaligned removes any gap characters for us setUnaligned(sequence); if ((numAmbig / (float) numBases) > 0.25) { m->mothurOut("[WARNING]: We found more than 25% of the bases in sequence " + name + " to be ambiguous. Mothur is not setup to process protein sequences."); m->mothurOutEndLine(); } }