Dunc
Dunc

Reputation: 8038

c number of lines in a file stream

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

Answers (4)

user1127914
user1127914

Reputation:

Take ftell() and divide by the length of the line.

Upvotes: 0

cnicutar
cnicutar

Reputation: 182619

How about something like this:

  • Do a fgets and find out how long one line is
  • Find 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

tdammers
tdammers

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

ThiefMaster
ThiefMaster

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

Related Questions