Как найти количество строк файла? - PullRequest
2 голосов
/ 03 ноября 2010

например:

file_ptr=fopen(“data_1.txt”, “r”);

как мне найти количество строк в файле?

Ответы [ 3 ]

9 голосов
/ 03 ноября 2010

Вы читаете каждый отдельный символ в файле и складываете те, которые являются символами новой строки.

Вы должны заглянуть в fgetc() для чтения символа и помнить, что он вернет EOF в конце файла и \n для символа конца строки.

Тогда вам просто нужно решить, является ли последняя неполная строка (т. Е. Файл не имеет новой строки в конце) строкой или нет. Я бы сказал, да, сам.

Вот как я это сделаю, конечно же, в псевдокоде, поскольку это домашнее задание:

open file
set line count to 0
read character from file
while character is not end-of-file:
    if character in newline:
        add 1 to line count
    read character from file

Расширение этого для обработки неполной последней строки может быть необязательным для этого уровня вопроса. Если равно (или вы хотите попробовать дополнительные кредиты), вы можете посмотреть:

open file
set line count to 0
set last character to end-of-file
read character from file
while character is not end-of-file:
    if character in newline:
        add 1 to line count
    set last character to character
    read character from file
if last character is not new-line:
    add 1 to line count

Нет гарантий, что кто-то из них сработает, так как они находятся у меня на макушке, но я бы удивился, если бы они не сработали (однако это не будет первым или последним сюрпризом, который я видел) - проверь это хорошо).

2 голосов
/ 03 ноября 2010

Вот другой способ:

#include <stdio.h>
#include <stdlib.h>

#define CHARBUFLEN 8

int main (int argc, char **argv) {
    int c, lineCount, cIdx = 0;
    char buf[CHARBUFLEN];
    FILE *outputPtr;

    outputPtr = popen("wc -l data_1.txt", "r");
    if (!outputPtr) {
        fprintf (stderr, "Wrong filename or other error.\n");
        return EXIT_FAILURE;
    }

    do {
        c = getc(outputPtr);
        buf[cIdx++] = c;
    } while (c != ' ');
    buf[cIdx] = '\0';
    lineCount = atoi((const char *)buf);        

    if (pclose (outputPtr) != 0) {
        fprintf (stderr, "Unknown error.\n");
        return EXIT_FAILURE;
    }

    fprintf (stdout, "Line count: %d\n", lineCount);

    return EXIT_SUCCESS;
}
1 голос
/ 03 ноября 2010

Является ли поиск количества строк первым шагом в более сложной операции?Если это так, я предлагаю вам найти способ работы с файлом, не зная заранее количество строк.

Если ваша единственная цель - считать строки, то вы должны их прочитать и ... считать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...