我正在尝试从以下文件中提取介于[HOCKEY]和[使用HOCKEY]之间的文本:
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]
使用以下代码,我将能够检查该行是否为[HOCKEY],但我无法记录[HOCKEY]和[HOCKEY完成]之间的第1行和最后一行的位置
#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 :(得分:1)
第一行是[HOCKEY]
之后的第一行。以及
最后一行是[done with HOCKEY]
之前的最后一行。
所以你需要的是逐行读取文件。当您阅读[HOCKEY]
时,您正在接近所需的实际数据,并开始阅读并存储下一行的数据。继续此步骤,直到您阅读[done with HOCKEY]
并停止。
答案 1 :(得分: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;
答案 2 :(得分: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;
}