2012-04-04 72 views
0

我有兩個FASTA文件:連接兩個FASTA文件中C++

file1.fasta

>foo 
ATCGGGG 
>bar 
CCCCCC 

file2.fasta

>qux 
ATCGGAAA 

我想現在做的是它們串聯成顯示結果的一個文件:

>foo 
ATCGGGG 
>bar 
CCCCCC 
>qux 
ATCGGAAA 

因此保留以「>」開頭的每個序列的名稱。 目前我下面的代碼替換該名稱索引,即:

>0 
ATCGGGG 
>1 
CCCCCC 
>0 
ATCGGAAA 

什麼是以下修改我的代碼,以正確的方式?

#include <iostream> 
#include <vector> 
#include <fstream> 
#include <sstream> 
#include<stdio.h> 
#include<string> 
using namespace std; 
#define MAX_LINE_SIZE 1024 

int mk_joint_file(char *ctrlFile, char *tgtFile, char *outFile){ 

    char s[MAX_LINE_SIZE]; 

    FILE *ofp = fopen(outFile,"w"); 
    FILE *cfp = fopen(ctrlFile,"r"); 
    FILE *tfp = fopen(tgtFile,"r"); 


    // char *p; 
    int flg=false; 
    int line=0; 
    while(fgets(s,MAX_LINE_SIZE,cfp) != NULL){ 
     if(s[0]=='>'){ 
      flg=true; 
      fprintf(ofp,">%d\n",line); 
      line++; 
     }else{ 
      if(flg==true){ 
       fprintf(ofp,"%s",s); 
      } 
      flg=false; 
     } 
    } 

    flg=false; 
    line=0; 
    while(fgets(s,MAX_LINE_SIZE,tfp) != NULL){ 
     if(s[0]=='>'){ 
      flg=true; 
      fprintf(ofp,">%d\n",line); 
      line++; 
     }else{ 
      if(flg==true) 
       fprintf(ofp,"%s",s); 
      flg=false; 
     } 
    } 

    fclose(cfp); 
    fclose(tfp); 
    fclose(ofp); 


    return(0); 
} 

int main(int argc, char **argv) 
{ 
    string ifname_control = argv[1]; 
    string ifname_target = argv[2]; 
    string ofname = "newjoin.txt"; 
    mk_joint_file((char *)ifname_control.c_str(), (char *)ifname_target.c_str(), (char *)ofname.c_str()); 

} 
+1

你需要編寫一個程序爲了這?您可以連接命令行/ shell中的兩個文本文件。在Windows命令提示符處,您可以說'copy file1.fasta + file2.fasta newjoin.txt'。 – Blastfurnace 2012-04-04 03:29:26

回答

1

是它不僅僅是這些行

fprintf(ofp,">%d\n",line); 

更改爲

// TODO check fgets() handling of EOL - may not need the \n 
fprintf(ofp, %s\n", s); 
1

任何困難只是改變線29和40 fprintf(ofp,"%s",s);