Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find the current line position of file pointer in C?

How can I get the current line position of the file pointer?

like image 362
En_t8 Avatar asked Mar 28 '10 15:03

En_t8


People also ask

How do we get current position of file pointer?

The ftell() function in C++ returns the current position of the file pointer.

Which function is used to determine the current position of the file pointer in C?

The ftell() function obtains the current value of the file position indicator for the stream pointed to by stream.

Will return the current position of file pointer in the file?

The seek() function sets the position of a file pointer and the tell() function returns the current position of a file pointer.


3 Answers

There is no function to get the current line; you'll have to keep track of it yourself. Something like this:

FILE *file;
int c, line;

file = fopen("myfile.txt", "rt");
line = 0; /* 1 if you want to call the first line number 1 */
while ((c = fgetc(file)) != EOF) {
    if (c == '\n')
        ++line;
    /*
        ... do stuff ...
    */
}
like image 100
Thomas Avatar answered Oct 19 '22 12:10

Thomas


You need to use ftell to give you the position within the file.

If you want the current line, you'll have to count the number of line terminator sequences between the start of the file and the position. The best way to do that is to probably start at the beginnning of the file and simmply read forward until you get to the position, counting the line terminator sequences as you go.

If you want the current line position (I assume you mean which character of the current line you're at), you'll have to count the number of characters between the line terminator sequence immediately preceding the position, and the position itself.

The best way to do that (since reading backwards is not as convenient) is to use fseek to back up a chunk at a time from the position, read the chunk into a buffer, then find the last line terminator sequence in the chunk, calculating the difference between that point and the position.

like image 29
paxdiablo Avatar answered Oct 19 '22 13:10

paxdiablo


There is no function that gives you current line. But you can use ftell function to get the offset in terms of number of char from the start of the file.

like image 15
codaddict Avatar answered Oct 19 '22 12:10

codaddict