To Find Number of Lines we can Just count how many new line characters ('\n') are there in our file
/*Finding Number of new line characters in a buffer*/
int find_count_of_lines(const char *str){
int liness=0, i=0;
for(i=0; str[i] != '\0'; i++){
if( str[i] == '\n' ){
liness+=1;
}
}
return liness;
}
/* Read a File chunk by chunk and sum number of new line character in individual chunks*/
int txt_file_number_of_line(FILE *fp){
int lines=0;
char buffer[1024]={0x00};
size_t bytes=0;
fseek(fp, 0L, SEEK_SET);
do{
memset(buffer, 0x00, sizeof(buffer));
bytes = fread(buffer, sizeof(char), sizeof(buffer)-1, fp);
if(bytes > 0){
lines += find_count_of_lines(buffer);
}
}while(bytes > 0);
return lines;
}
complete code
#include <stdio.h>
#include <string.h>
/*Finding Number of new line characters in a buffer*/
int find_count_of_lines(const char *str){
int liness=0, i=0;
for(i=0; str[i] != '\0'; i++){
if( str[i] == '\n' ){
liness+=1;
}
}
return liness;
}
/* Read a File chunk by chunk and sum number of new line character in individual chunks*/
int txt_file_number_of_lines(FILE *fp){
int lines=0;
char buffer[1024]={0x00};
size_t bytes=0;
fseek(fp, 0L, SEEK_SET);
do{
memset(buffer, 0x00, sizeof(buffer));
bytes = fread(buffer, sizeof(char), sizeof(buffer)-1, fp);
if(bytes > 0){
lines += find_count_of_lines(buffer);
}
}while(bytes > 0);
return lines;
}
int main(int argc, char *argv[]){
FILE *fp = NULL;
int number_of_lines = 0;
if(argc != 2){
fprintf(stderr, "USAGE: %s <filename>\n", argv[0]);
return -1;
}
fp = fopen(argv[1], "r");
number_of_lines= txt_file_number_of_lines(fp);
printf("%s having %d Lines\n", argv[1], number_of_lines);
fclose(fp);
return 0;
}
Compiling and Output of Program
rajesh@ideapad:~/Rajesh/Blog/file$ gcc find_lines_count.c
rajesh@ideapad:~/Rajesh/Blog/file$ ./a.out
USAGE: ./a.out
rajesh@ideapad:~/Rajesh/Blog/file$ ./a.out find_lines_count.c
find_lines_count.c having 42 Lines
rajesh@ideapad:~/Rajesh/Blog/file$ wc find_lines_count.c
42 126 1210 find_lines_count.c
No comments:
Post a Comment