2013-11-29 2 views
1

Я писал код, и у меня есть проблема.Сравнение 2 текстовых файлов

У меня есть 2 текстовых файлов .txt, которые выглядят так:

файла нет. 1 (fasta)

DOJHLOP01DWJWJ 
TCGATTCTATGGAGGGATGCTGGCAAGGCTCCGGAAGCAGCATCAGCAATTAAAAAAT 
DOJHLOP01C1GFF 
TTTACACAGTTGCAAGCCCTGAAGCTTGTGCTTCGATTCTATGGAGGGATGCTGGCAA 
DOJHLOP01CAI84 
AGGCGTCGCAGACAGGTTACTTATGTTTGAACATAGTGTTTACACAGTTGCAAGCCCT 

Номер дела. 2 (каче)

DOJHLOP01DWJWJ 
32 31 29 26 30 27 32 32 31 30 28 26 26 28 27 19 26 31 24 32 31 30 25 25 29 
DOJHLOP01C1GFF 
28 28 16 26 31 32 31 28 32 31 27 30 31 29 23 32 29 28 16 31 31 29 24 32 31 
DOJHLOP01CAI84 
31 30 25 30 27 24 31 31 31 32 32 31 30 24 27 21 31 27 32 31 30 25 25 28 31 

Как певце можно видеть, каждая вторая линия та же, и в результате я хочу, чтобы получить выходной файл, который содержит эквивалентные линии, которые отличаются, i.ex.

TCGATTCTATGGAGGGATGCTGGCAAGGCTCCGGAAGCAGCATCAGCAATTAAAAAAT 
32 31 29 26 30 27 32 32 31 30 28 26 26 28 27 19 26 31 24 32 31 30 25 25 29 

Я написал код, используя вектор, но что-то не так, потому что я получаю пустой файл в качестве вывода. Пожалуйста, помогите!

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

using namespace std; 

int main() 
{ 
     string fasta,qual; 
     vector <string> v1,v2; 
     ifstream file; 
     fstream out_file; 
     int i; 

     cout <<"insert the name of fasta file"<<endl; 
     cin>>fasta; 
     cout<<"instert the name of qual file"<<endl; 
     cin>>qual; 

     file.open(fasta.c_str(),ifstream::in); 
     while(getline(file,fasta)) 
     { 
      v1.push_back(fasta); 
     } 
     file.close(); 

     file.open(qual.c_str(),ifstream::in); 
     while(getline(file,qual)) 
     { 
      v2.push_back(qual); 
     } 
     file.close(); 

     out_file.open ("out_file.txt"); 

     for(i=0;i<v1.size();i++) //assuming the qual and fasta have the same numer of lines 
     { 
       if(v1[i]!=v2[i]) //if two lines are different 
       { 
         out_file<<v1[i]; //write this line into the out_file 
         out_file<<'\n'; 
         out_file<<v2[i]; //write this line into the out_file 
         out_file<<'\n'; 
       } 

     } 

     out_file.close(); 

     return 0; 
} 

Большое спасибо за помощь!

+0

Это реальный код? 'Plik3.close();' кажется запутанным. – luk32

+0

Я предполагаю, что plik2.close - это его неудача, чтобы полностью очистить его пример для нас. Я проигнорировал это. – RichardPlunkett

+0

Ну, я не вижу здесь ничего явно неправильного, поэтому, возможно, что-то важное разделилось или было потеряно в переводе ('plik' является' файлом' на польском языке) для примера. И если игнорировать его, файл может быть пустым, потому что 'out_file' не удалось закрыть во время проверки. Важно подготовить «рабочий» пример неудачи. – luk32

ответ

2

изменение fstream out_file; к ofstream out_file;

+0

Ummm [cppreference] (http://en.cppreference.com/w/cpp/io/basic_fstream/basic_fstream) говорит «Явный basic_fstream (const char * filename, ios_base :: openmode mode = ios_base :: in | ios_base :: out); 'так что вы или они ошибаются. – luk32

+0

Да, исправить правильные, детали неправильно, теперь редактирование. – RichardPlunkett

+0

Спасибо большое! Я заменил работы fstream и ofstream! – AirelleJab

Смежные вопросы