Reputation: 8038
I have a file stream in C and I want to know how many lines are in it without iterating through the file. Each line is the same length. How might I go about this?
Upvotes: 0
Views: 578
Reputation: 182619
How about something like this:
fgets
and find out how long one line isFind the size of the file using fseek
and ftell
fseek(fp, 0, SEEK_END);
size = ftell(fp);
Divide by the size of the line
You can also use fseeko
and ftello
which work with off_t
.
Upvotes: 3
Reputation: 20721
If it is safe to assume that all lines are of equal length, you can simply read in the first line, get its length, then get the file size, and divide file size by line length.
This will only work with fixed-width encodings (ASCII-7, the various 8-bit ANSI encodings, UTF-32); with variable-width encodings (e.g. UTF-8), you will have to scan the entire file, because string length is not necessarily proportional to the number of bytes.
Upvotes: 2
Reputation: 318498
Read one line, stat()
the file to get the total size, divide the total size by the length of the first line.
Instead of using stat()
you could also fseek()
to the end of the file and then use ftell()
to get the size.
Upvotes: 0