How to write a ANSI C user-defined function that returns a specific line from a text file?
How to write a ANSI C user-defined function that returns a开发者_运维知识库 specific line from a text file?
char * ReadFromFile(const char * fileName, int line)
{
//..........
}
This should do the trick:
char * ReadFromFile(const char * fileName, int line)
{
FILE *fp;
char c;
char *buffer = malloc( 100 * sizeof(char) ); // change 100 to a suitable value;
int buffer_length = 100; // eg. max length of line in your file
int num = 0;
if(line < 0) // check for negative line numbers
{
printf("Line number must be 0 or above\n");
return(NULL);
}
if( ( fp = fopen(fileName,"r") ) == NULL )
{
printf("File not found");
return(NULL);
}
while(num < line) // line numbers start from 0
{
c = getc(fp);
if(c == '\n')
num++;
}
c = getc(fp);
if(c == EOF)
{
printf("Line not found\n");
fclose(fp);
return(NULL);
}
else
{
ungetc(c,fp); //push the read character back onto the stream
fgets(buffer,buffer_length,fp);
fclose(fp);
return(buffer);
}
}
Edit: The boundary conditions suggested by caf
& lorenzog
in the comments have been included. Never thought error-proofing could be so tedious! (Still doesn't check for cases where line number is more than int
can safely hold. This is left as an exercise to OP :)
精彩评论