分求C语言问题解决——关于TXT文件导入(第二贴,能给出的这个100和另外的100一起拿走!)

C语言 码拜 10年前 (2015-05-11) 1012次浏览 0个评论
 

我有一道题目,要求建立一个索引,然后我想用链表或数组从txt导入数据
具体数据如下:
>read_170_1_1 random_genome_10000000 3888122 100 
TTTCCTTTTTTTGAACAGATGATTTTAGTGAGCACTGCGCTAGGAGTATGTGTTGAATCTCCAACCCTCGGAACATAGTCGTTGCTCTTGCGGACTGAGA
>read_170_2_1 random_genome_10000000 5846156 100 
GGAATCTGCAACTCGGATGGCCGTCTCAAGTAAGCAACAACATTGTTGCTTGCGGCTTCCCGGGTGTCGCTAAGCGTTTAAAAAGTTGTTAGGATTAACC
>read_170_3_1 random_genome_10000000 9709431 100 
CTCTTTCTACCTAATGGTGAAATTCGCGAGAGAACGATTAGACACGCCGCGCTGATGGGCAGGAGTGTTTGCACTCGATGAATCCCTCGACTGGGACCGG
。。。(一共100W个。。。)
以上数据只要大写的字母部分导入,如TTTCCTTTTTTTGAACAGATGATTTTAGTGAGCACTGCGCTAGGAGTATGTGTTGAATCTCCAACCCTCGGAACATAGTCGTTGCTCTTGCGGACTGAGA为一个数据,然后同时每导入一个数据要求编号,如1,2,3.。。。最后能输出从TXT导入的数据和对应的编号。。。
谢谢大神!!

100分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
char *DNA;
char ln[200];
char st[200];
FILE *f;
int i,n;
int main() {
    DNA=(char *)calloc(1000000*200,1);
    if (null==DNA) {
        printf("Can not calloc 1000000*200 bytes!\n");
        return 1;
    }
    f=fopen("in.txt","r");
    if (NULL==f) {
        printf("Can not open file in.txt!\n");
        return 2;
    }
    i=0;
    while (1) {
        if (NULL==fgets(ln,200,f)) break;
        if (1==sscanf(ln,"%199[ACGT]",st)) {
            strcpy(DNA+i*200,st);
            i++;
            if (i>=1000000) break;
        }
    }
    fclose(f);
    n=i;
    for (i=0;i<n;i++) printf("%s  %d\n",i+1,DNA+i*200);
    free(DNA);
    return 0;
}
第32行
    for (i=0;i<n;i++) printf(“%s  %d\n”,i+1,DNA+i*200);
应改为
    for (i=0;i<n;i++) printf(“%s  %d\n”,DNA+i*200,i+1);
两贴无区别啊
#include<stdio.h>
#include<malloc.h>

int main()
{
	int invalidnum;
	int id,len;
	char *val=NULL;
	FILE *file=fopen("in.txt","r");
	if(!file)
	{
		fputs("Can""t open file in.txt",stderr);
		return 1;
	}
	else
	{
		while(fscanf(file,">read_%d_%d_%d random_genome_%d %d %d\n",&invalidnum,&id,&invalidnum,&invalidnum,&invalidnum,&len)!=EOF)
		{
			char *tval=(char*)realloc(val,sizeof(char)*++len);
			if(!tval)
			{
				if(val)free(val);
				fclose(file);
				fputs("No memory can be allocated",stderr);
				return 2;
			}
			val=tval;
			fgets(val,len,file);
			printf("%s\t%d\n",val,id);
			fgetc(file);
		}
		if(val)free(val);
		fclose(file);
	}
	return 0;
}
链表及文件操作参考代码
https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c
额,题目的要求是什么?如果只是编号1楼的程序没解决吗?
要不lz把题目截个图,把完整的要求发上来
1.单链表双链表都可行,好像你知道总数(100个),因此,静态或动态指针数组也能办
2.如果是格式化数据结构写进去的,当然逆向能格式化读出。如果不是转3
3.字符串解析,很显然,遇到第一个大写字母,开始记录,遇到第一个非大写字母,提取字符串结束。将此字符串存储编号;如此循环
注:为了提高读取的速度,可考虑使用文件映射方式,将文件映射进内存,如此就像处理普通字符串数组一样了!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明分求C语言问题解决——关于TXT文件导入(第二贴,能给出的这个100和另外的100一起拿走!)
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!