用C ++连接两个FASTA文件

时间:2012-04-04 03:12:23

标签: c++ string

我有两个FASTA文件:

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());

}

2 个答案:

答案 0 :(得分:1)

难道只是改变这些行

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

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

答案 1 :(得分:1)

只需将第29行和第40行更改为 fprintf(ofp,"%s",s);