2012-10-22 2 views
0

C 언어를 사용하여 텍스트 파일에서 유전자의 수를 계산하려면 삼중 항은 3 자 세트입니다. 유전자는 시작과 끝을 포함하는 일련의 삼중 항으로 구성됩니다. ATGC에서 텍스트 파일의 전체 유전자 수를 계산

유전자의 끝 : 유전자

시작하는 유전자의 경우 유효한 것으로 간주된다

TAA, TGA 또는 TAG 예를 들면 시작 부분과 끝 부분 사이의 적어도 하나의 삼중 TAA ATG는 유효한 유전자 텍스트 파일의

예 아니라, 텍스트 파일은 여러 줄

을 가질 수 있습니다 0

ATGGCA TAT ATG TGG이 예에 포함

AAGTAA GTT GTA ATGCAC GAT GGC AAC GGC GGCTAG CCA ATG AAA 두 유전자

나는 지금까지 그것을 시도했다, 처음과 그 다음 끝을 발견하는 방법을 모르고있다.

int Count (char *file) { 
    FILE *ptr = NULL; 
    int count = 0; 

    char *start = "ATG"; 
    char *end = "TAA"; // miss TGA, TAG 

    char chr; 
    int occur, i; 

    ptr = fopen(filename, "r"); //open text file 

     if (ptr == NULL) 
      return -1; 

    chr = fgetc(ptr); 
    while(chr != EOF){ 

      if(ch == start[0]){     
        for(i=1; i< StrLen(start); i++){ 
        chr = fgetc(ptr); 

         if(chr == EOF){ 
          occur = 0; 
          break; 
         } 
         else if(chr != start[i]){ 
          chr = fgetc(ptr); 
          occur = 0; 
          break; 
         } 
         else 
          occur = 1; 
        } 

        if(occur == 1){ 
         count++; 
        } 

      } else{ 
       chr = fgetc(ptr); 
      }    
     } 

    if (!feof(ptr)){ 
     return -1; 
    } 
    fclose(ptr); 

    return count; 
} 

int StrLen(char *word){ 
int i = 0; 
char c = word[0]; 
while(c != '\0'){ 
    i++; 
    c = word[i]; 
} 
return i; 
} 

제발 도와주세요! :)

+1

"DoMyWork"로 stackoverflow를 오해하지 마십시오. C로 파일을 읽고 앞으로 나아가고 코드를 작성하는 동안 문제에 대해 질문하십시오. –

+0

[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com) – SparKot

+0

사소한 정규 표현식처럼 보입니다. 이 방법을 시도해보십시오. 정규 표현식을 사용하는 데 문제가 있으면 다시 방문하십시오. – Barmar

답변

0

상위 레벨에서 문제점을 조사하십시오. 일련의 삼중 항으로 이루어진 유전자를 찾고 싶습니다. 그것을 위해서는 세 쌍둥이를 읽고 그것을 테스트해야합니다. 그것은 유전자의 시작이나 끝 또는 중간에있는 것입니다.

char triplet[4]; 
while (read_triplet(fp, triplet)) { 
    if (is_beginning(triplet)) { 
     /* handle beginning */ 
    } else if (is_end(triplet)) { 
     /* handle end of gene */ 
    } else { 
     /* is between */ 
    } 
} 

을 다음 삼중 처리를 위해 함수를 정의 :

그래서,이 같이 볼 수 있었다 이것은 시작을하는 데 도움이

int read_triplet(FILE *fp, char *triplet) { /* ... */ } 
int is_beginning(const char *triplet) { return strcmp(triplet, "ATG") == 0; } 
int is_end(const char *triplet) 
{ 
    if (strcmp(triplet, "TAA") == 0) 
     return 1; 

    if (strcmp(triplet, "TGA") == 0) 
     return 1; 

    if (strcmp(triplet, "TAG") == 0) 
     return 1; 

    /* No, it's not an end triplet */ 
    return 0; 
} 

희망을.

0

이렇게하는 한 가지 방법은 flex를 사용하여 스캐너를 만들고 스캐너가 작업하도록하는 것입니다. dinosaur.compilertools.netFLEX을 살펴보십시오. 올드 스쿨 도메인 특정 언어은 텍스트 시퀀스의 문법, 구문 및 구문 분석을 처리하기 위해 c/C++ 용 코드를 생성하는 데 도움이되는 도구입니다. C 프로그램 내에서 생성 된 코드를 사용하기 만하면됩니다. 추가 참고 사항 : 요구 사항이 허용되는 경우 perl을 사용해야합니다. 해당 유형의 작업에 맞게 조정 되었기 때문입니다.

관련 문제