0

我有两个 FASTA 文件:

文件1.fasta

>foo
ATCGGGG
>bar
CCCCCC

文件2.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());

}
4

2 回答 2

1

是否比仅仅更改这些行更难

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

// TODO check fgets() handling of EOL - may not need the \n
fprintf(ofp, %s\n", s);
于 2012-04-04T03:19:42.840 回答
1

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

于 2012-04-04T03:35:09.927 回答