读书人

一个索引有关问题希望能解决

发布时间: 2012-03-20 14:01:11 作者: rapoo

一个索引问题,希望能解决
HWI-ST568_0052:1:2206:4629:64033#ATCACG21428369CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT23028555CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT
HWI-ST568_0052:1:1105:17008:100504#ATCACG299399100ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:1208:5265:118380#CGATGT299399100ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:2108:11510:189365#CGATGT299399100ATATGCCTTTGGCGATGGAAAAGCGATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTTAGCTCTGCCATCGATTTCGTTCACCCCGTCGCCAAC
HWI-ST568_0052:7:1103:10448:148856#CGATGT301401100ATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAACTT

上面是一些基因序列(从txt文件截取出来的),由“tab”分割开,第一个字符流是名字,第二数字是开始位置,接下来是结束位置,后面是DNA长度,在后面的一堆字符流是基因序列。
现在要做的是输入一个基因点,然后就直接输出这个基因点所在的所有基因片段。 比如输入基因点238,那么就列出

HWI-ST568_0052:1:2206:4629:64033#ATCACG21428369CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT23028555CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT

现在我卡在了把所截得的每一行字符流分别对应到各个struct的变量里。大家帮帮我吧,还有后面的对比怎么写啊??如果输出struct的值,是不是就直接print这个struct的名字就行了??

一下是我的代码,大家帮我补充完整吧,有点凌乱了

C/C++ code
#include <stdio.h>#include <string.h>#include <conio.h>struct DNAdata{    char name[999];    int start, end, lon;    char DNA[999];};DNAdata getdata();FILE *f;DNAdata a[9999];char line[9999];int search;int main(){    int i=0;    char temp[99];    while(true)    {        printf("Please enter the file name(eg. DNA.txt): ");        gets(temp);        f=fopen(temp,"r");        if(f!=NULL)        {            break;        }        else        {            printf("%s does not exist. Please check the name and enter again.\n",temp);        }    }    while(fgets(line,2048,f)!=NULL)    {    printf("%s\n",line);        //a[i]=getdata();        printf("%d\n",i);        printf("\n");        i++;    }    fclose(f);}/*DNAdata getdata(){    }*/


[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>#define MAXNAMELEN   999#define MAXNAMELENQ "999"#define MAXDNALEN    999#define MAXDNALENQ  "999"#define MAXDATA     9999#define MAXLINELEN  9999#define MAXFNLEN     256struct DNAdata {    char name[MAXNAMELEN+1];    int start, end, len;    char DNA[MAXDNALEN+1];} a[MAXDATA];FILE *f;char line[MAXLINELEN];int search;int i,r,n;char fn[MAXFNLEN];int main() {    while (1) {        printf("Please enter the file name(eg. DNA.txt): ");        fflush(stdout);        rewind(stdin);        fgets(fn,MAXFNLEN,stdin);        if ('\n'==fn[strlen(fn)-1]) fn[strlen(fn)-1]=0;        f=fopen(fn,"r");        if (f!=NULL) {            break;        } else {            printf("%s does not exist. Please check the name and enter again.\n",fn);        }    }    i=0;    while (1) {        if (NULL==fgets(line,MAXLINELEN,f)) break;        r=sscanf(line,"%"MAXNAMELENQ"s%d%d%d%"MAXDNALENQ"s",a[i].name,&a[i].start,&a[i].end,&a[i].len,a[i].DNA);        i++;        if (5!=r) printf("%d lines data format error! ignored.\n",i);        if (i>=MAXDATA) {            printf("Up to %d lines dada, spilth ignored.\n",MAXDATA);            break;        }    }    fclose(f);    n=i;    while (1) {        printf("Please enter the DNA point(-1 to exit): ");        fflush(stdout);        rewind(stdin);        if (1==scanf("%d",&r)) {            if (r<0) break;            search=0;            for (i=0;i<n;i++) {                if (a[i].start<=r && r<=a[i].end) {                    search=1;                    printf("%s %d %d %d %s\n",a[i].name,a[i].start,a[i].end,a[i].len,a[i].DNA);                }            }            if (0==search) printf("Can not find any data in DNA point %d !\n",r);        }    }    return 0;} 

读书人网 >C++

热点推荐