2014-01-29 93 views
0

特定文本的两行之间的文件和提取行我想提取文本是在[曲棍球]之间,并从以下文件[曲棍球做]:阅读用C

sport.txt

[HOCKEY] 
a=10 
b=20 
c=30 
d=45 
[done with HOCKEY] 
[SOCCER] 
a=35 
b=99 
c=123 
d=145 
[done with SOCCER] 

用下面的代码,我就能检查线[曲棍球]但我无法拍摄到一号线[曲棍球]之间的位置和最后一行[曲棍球做]

#include<stdio.h> 
int main() 
{ 
FILE *infile; 
char start, end; 
char *sport="[]"; 
char line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */ 
int line_number,i; 
infile = fopen("sport.txt", "r"); 
printf("Opened file for reading\n"); 
line_number = 0; 
while (fgets(line_buffer, sizeof(line_buffer), infile)) { 
    ++line_number; 
    /* note that the newline is in the buffer */ 
    if (line_buffer=="[HOCKEY]") 
    { 
    start=line_buffer; 
    printf("Found start %s",start); 
    } 
     if (line_buffer=="[done with HOCKEY]") 
    end=line_buffer; 

    while(start<end){ 
    printf("%c",start); 
    start++; 
    system("PAUSE"); 
    } 
} 
return 0; 
} 
+0

究竟是什么问题? – herohuyongtao

+0

需要学习如何处理C中的字符串。 – BLUEPIXY

回答

1
  1. 第一行是[HOCKEY]后的第一行。并且

  2. 最后一行是[done with HOCKEY]之前的最后一行。

所以你需要的是一行一行地读取文件。当您读取[HOCKEY]时,您正在接近您所需的实际数据,并开始读取并存储下一行的数据。继续此步骤,直到您阅读[done with HOCKEY]并停止。

0
int count = 0; 
char found_it = 0; 
char *wordStart = "[HOCKEY]"; 
char *wordStop = "[done with HOCKEY]"; 
int charCount = strlen(wordStart); 
while((c = getc(fptr)) != EOF){ 
    if(c == wordStart[count]){ 
     count++; 

     if(count == charCount){printf("Found [HOCKEY] \n"); found_it = 1; break;} 
    } 
    else{ 
     count = 0; 
    } 
} 

if(!found_it){printf("Did not find [HOCKEY] \n"); return 0;} 

count = 0; found_it = 0; 
charCount = strlen(wordStop); 
while((c = getc(fptr)) != EOF){ 
    printf("%c", c); 
    if(c == wordStop[count]){ 
     count++; 

     if(count == charCount){found_it = 1; break;} 
    } 
    else{ 
     count = 0; 
    } 
} 

if(!found_it){printf("Did not find [done with HOCKEY] \n");} 
return 0; 
0
#include <stdio.h> 
#include <string.h> 

int main(){ 
    FILE *infile; 
    fpos_t start, end, pre_pos; 
    char line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */ 
    //char line_buffer[128]; // BUFSIZ : I do not know if there is a large enough 

    infile = fopen("sport.txt", "r"); 
    if(infile) 
     printf("Opened file for reading\n"); 
    else { 
     perror("file open"); 
     return -1; 
    } 
    fgetpos(infile, &pre_pos); 
    end = start = pre_pos; 
    while (fgets(line_buffer, sizeof(line_buffer), infile)) { 
     if (strcmp(line_buffer, "[HOCKEY]\n")==0){ 
      fgetpos(infile, &start); 
     } else if (strncmp(line_buffer, "[done with HOCKEY]", 18)==0){//18 == strlen("[done with HOCKEY]"); 
      end=pre_pos; 
      break; 
     } 
     fgetpos(infile, &pre_pos); 
    } 
    fsetpos(infile, &start); 
    while(start<end){ 
     printf("%c", fgetc(infile)); 
     fgetpos(infile, &start); 
    } 
    fclose(infile); 
    system("PAUSE"); 
    return 0; 
}