diff --git a/src/main.cpp b/src/main.cpp index 63b56e1..93dca75 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,6 +30,7 @@ int main() //参数列表 <文件分块内存大小,单个DNA序列最长大小>("输入文件名","输出文件名",序列处理函数); //这个函数在src/tools/dna里面 dna::open_file_and_calculate<(size_t)4*1024 * 1024 *1024 , (size_t)5e4+5>("filteredReads.txt", "reversedSequence.txt",reverseComplement); + // dna::open_file_and_calculate<(size_t)30, (size_t)5e4 + 5>("test.txt", "test.out.txt", reverseComplement); }catch(const std::exception &e){ zt::eprint( diff --git a/src/tools/dna.hpp b/src/tools/dna.hpp index 40e6af5..566c8ab 100644 --- a/src/tools/dna.hpp +++ b/src/tools/dna.hpp @@ -74,8 +74,10 @@ namespace dna { Spent all_spent("All spent"); //自动计时器,给主函数计时 unsigned int chunk_id = 0; size_t last_buf_size = 0; + while (input_file_stream.eof()==false) { + size_t recovered_size = 0; Spent chunk_spent(zt::fmt("chunk_id:[",++chunk_id,"]")); { Spent chunk_read_spent(zt::fmt("read_chunk_id:[",chunk_id,"]")); @@ -108,8 +110,10 @@ namespace dna { } // lines=!lines; output_file_stream.write(tmp_buf.data(), last_buf_size+end_pos+1); + start_pos=end_pos+1; + recovered_size=end_pos+1; }else{ - THROW_RT_ERROR("DNA incompleteness") + THROW_RT_ERROR("DNA incompleteness, chunk Size is too small !!") } last_buf_size=0; } @@ -152,12 +156,12 @@ namespace dna { if(start_pos!=buf_len){ zt::print("Saving interrupt chunk_id[",chunk_id,"]\n"); - std::memcpy(tmp_buf.data(),buf.data()+start_pos+1,(last_buf_size = buf_len-start_pos-1)); + std::memcpy(tmp_buf.data(),buf.data()+start_pos,(last_buf_size = buf_len-start_pos)); } { Spent chunk_write_spent(zt::fmt("write_chunk_id:[",chunk_id,"] , ","[Wrote bytes] ",NAME_VALUE(start_pos))); - output_file_stream.write(buf.data(), start_pos); + output_file_stream.write(buf.data()+recovered_size, start_pos-recovered_size); }