我有两个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());
}
答案 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);