首页 > 代码库 > C语言读取fasta格式
C语言读取fasta格式
一开始用fopen 读取文件的时候 总是返回Null
Can‘t open (null) for reading. 原因是最后一个参数后面有“\n”
对于fasta序列有多行的情况,需要把字符串连接, 这在perl 或 python里面都比较容易实现;
在C里面也可以实现, 有个strcat函数, 这里还有一种方法是自定义连接字符串的函数
例一
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define LINE 4096 void rtrim(char *str){ char *s; s = str + strlen(str); while (--s >= str) { if (!isspace(*s)) break; *s = 0; } } int main(int argc, char * argv[]){ void rtrim(char *str); FILE *in; char *T1 = (char*)malloc(sizeof(char) *LINE); int i, a, seq_len, seq_number = 0; char fa[10240] = ""; for (i = 1; i < argc; i++){ printf("%s\n",argv[i]); rtrim(argv[i]); in = fopen(argv[i], "r"); if ( in == NULL){ printf ("Can‘t open %s for reading.\n", argv[i]); return 1; } while(!feof(in)){ fgets(T1, LINE, in); if (T1[0] != ‘>‘ ){ rtrim(T1); strcat(fa, T1); } else { seq_number ++; if(seq_number > 1){ printf("%s\n",fa); } printf ("%s",T1); memset(fa,0, 10240); } } printf("%s\n",fa); fclose(in); free(T1); } return 0; }
例二
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define LINE 4096 void rtrim(char *str){ char *s; s = str + strlen(str); while (--s >= str) { if (!isspace(*s)) break; *s = 0; } } void concatStr(char *a, char *b){ while(*a++); a--; while((*a++ = *b++)!=‘\0‘); } int main(int argc, char * argv[]){ void rtrim(char *str); void concatStr(char *a, char*b); FILE *in; char *T1 = (char*)malloc(sizeof(char) *LINE); int i, a, seq_len, seq_number = 0; char *pfa = (char*)malloc(sizeof(char) * 10240); for (i = 1; i < argc; i++){ printf("%s\n",argv[i]); rtrim(argv[i]); in = fopen(argv[i], "r"); if ( in == NULL){ printf ("Can‘t open %s for reading.\n", argv[i]); return 1; } while(!feof(in)){ fgets(T1, LINE, in); if (T1[0] != ‘>‘ ){ rtrim(T1); concatStr(pfa, T1); } else { seq_number ++; if(seq_number > 1){ printf("%s\n",pfa); } printf ("%s",T1); memset(pfa,0, 1024); } } printf("%s\n",pfa); fclose(in); free(T1); free(pfa); } return 0; }
两个共同点是 都要用memset对指针清零, 不同点是第一个不用free(), 第二个要用free()释放内存
本文出自 “R和Python应用” 博客,请务必保留此出处http://matrix6ro.blog.51cto.com/1746429/1898975
C语言读取fasta格式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。