C语言读取fasta格式
2017-02-17 22:48
316 查看
一开始用fopen 读取文件的时候 总是返回Null
Can't open (null) for reading. 原因是最后一个参数后面有“\n”
对于fasta序列有多行的情况,需要把字符串连接, 这在perl 或 python里面都比较容易实现;在C里面也可以实现, 有个strcat函数, 这里还有一种方法是自定义连接字符串的函数
例一
例二
两个共同点是 都要用memset对指针清零, 不同点是第一个不用free(), 第二个要用free()释放内存
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()释放内存
相关文章推荐
- 用C语言读取大文件的问题 内存映射
- C语言之控制台读取上下左右方向键指令
- C语言中读取时间日期的基本方法
- c语言读取每一行,再将符合条件的写入另一个文件中。
- 【C语言】编写一个程序,从标准输入读取C源代码,验证所有的花括号都正确的成对出现
- window下C语言实现读取config.ini配置文件
- C语言二进制文件读取
- c语言 文件写入和读取
- C语言文件读写操作,从文件读取数据
- C语言读取文件方面 代码的优化
- C语言读取文件内容统计代码
- Linux环境用C语言实现读取配置文件来区分产品的多个版本以及多个功能
- Linux下C语言实现的简单使用线程向FIFO里写入与读取数据的例子
- 怎么用c语言实现读取一个txt文件里的数据 要按行读出来
- C语言实现读取文件所有内容到字符串
- C语言中结构体写入文件中,再从文件中读取,更新文件等
- C语言:从文本文件中读取输入数据
- PCM WAVE格式详解及用C语言实现wave文件的读取
- C语言读取文件数据到结构体数组
- C语言读取配置文件