小编Kos*_*s L的帖子

在C中以字符串形式读取文本文件的特定部分?

我正在编写读取包含DNA碱基的巨大文本文件的代码,我需要能够提取特定部分。该文件如下所示:

TGTTCCAGGCTGTCAGATGCTAACCTGGGG
TCACTGGGGGTGTGCGTGCTGCTCCAGCCT
GTTCCAGGATATCAGATGCTCACCTGGGGG
Run Code Online (Sandbox Code Playgroud)

...

每行30个字符。

我有一个单独的文件来指示这些部分,这意味着我有一个开始值和一个结束值。因此,对于每一个开始结束的值,我需要提取的文件中的相应字符串。例如,如果我有start = 10,end = 45,则需要将以第一行(C)的第10个字符开始并以第2行(C)的第15个字符结束的字符串存储在单独的临时文件中文件。

我尝试将fread函数(如下所示)用于具有上述字母行的测试文件。参数分别为:开始 = 1,结束 = 90,结果文件如下:

TGTTCCAGGCTGTCAGATGCTAACCTGGGG
TCACTGGGGGTGTGCGTGCTGCTCCAGCCT
GTTCCAGGATATCAGATGCTCACCTGGG™eRV
Run Code Online (Sandbox Code Playgroud)

每次运行都会在末尾给出随机字符。

代码:


FILE* fp;
fp=fopen(filename, "r");
if (fp==NULL) puts("Failed to open file");

int start=1, end=90;
char string[end-start+2]; //characters from start to end = end-start+1

fseek(fp, start-1, SEEK_SET);

fread(exon,1, end-start+1, fp);

FILE* tp;
tp=fopen("exon", "w");
if (tp==NULL) puts("Failed to make tmp file");

fprintf(tp, "%s\n", string);
fclose(tp);

Run Code Online (Sandbox Code Playgroud)

我不明白fread如何处理\ n字符,因此我尝试将其替换为以下内容:

int i=0; …
Run Code Online (Sandbox Code Playgroud)

c

8
推荐指数
1
解决办法
132
查看次数

标签 统计

c ×1