一个查找有关问题,希望能解决
一个查找问题,希望能解决
HWI-ST568_0052:1:2206:4629:64033#ATCACG 214 283 69 CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT 230 285 55 CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT
HWI-ST568_0052:1:1105:17008:100504#ATCACG 299 399 100 ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:1208:5265:118380#CGATGT 299 399 100 ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:2108:11510:189365#CGATGT 299 399 100 ATATGCCTTTGGCGATGGAAAAGCGATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTTAGCTCTGCCATCGATTTCGTTCACCCCGTCGCCAAC
HWI-ST568_0052:7:1103:10448:148856#CGATGT 301 401 100 ATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAACTT
上面是一些基因序列(从txt文件截取出来的),由“tab”分割开,第一个字符流是名字,第二数字是开始位置,接下来是结束位置,后面是DNA长度,在后面的一堆字符流是基因序列。
现在要做的是输入一个基因点,然后就直接输出这个基因点所在的所有基因片段。 比如输入基因点238,那么就列出
HWI-ST568_0052:1:2206:4629:64033#ATCACG 214 283 69 CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT 230 285 55 CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT
现在我卡在了把所截得的每一行字符流分别对应到各个struct的变量里。大家帮帮我吧,还有后面的对比怎么写啊??如果输出struct的值,是不是就直接print这个struct的名字就行了??
一下是我的代码,大家帮我补充完整吧,有点凌乱了
------解决方案--------------------
HWI-ST568_0052:1:2206:4629:64033#ATCACG 214 283 69 CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT 230 285 55 CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT
HWI-ST568_0052:1:1105:17008:100504#ATCACG 299 399 100 ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:1208:5265:118380#CGATGT 299 399 100 ATATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAAC
HWI-ST568_0052:7:2108:11510:189365#CGATGT 299 399 100 ATATGCCTTTGGCGATGGAAAAGCGATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTTAGCTCTGCCATCGATTTCGTTCACCCCGTCGCCAAC
HWI-ST568_0052:7:1103:10448:148856#CGATGT 301 401 100 ATGCCTTTGGCGATGGAAAAGCCATTCTCCGAACCACAGAATATAACATCCCGGAGGAGCTCACCTCTGCCATCGATTTCGTTCACCCTGTCGCCAACTT
上面是一些基因序列(从txt文件截取出来的),由“tab”分割开,第一个字符流是名字,第二数字是开始位置,接下来是结束位置,后面是DNA长度,在后面的一堆字符流是基因序列。
现在要做的是输入一个基因点,然后就直接输出这个基因点所在的所有基因片段。 比如输入基因点238,那么就列出
HWI-ST568_0052:1:2206:4629:64033#ATCACG 214 283 69 CCAATGTTAGAGCTGACCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCG
HWI-ST568_0052:7:1201:2703:166808#CGATGT 230 285 55 CCAGGACTGGATACACGCGACGGCGACAGTAGAGCAAGTCGACAAGCTCCTCGAT
现在我卡在了把所截得的每一行字符流分别对应到各个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 256 struct 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; }