如何查找文件的行数?

时间:2010-11-03 04:22:07

标签: c file

例如:

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

如何在文件中找到行数?

3 个答案:

答案 0 :(得分:9)

您读取文件中的每个字符并添加换行符。

您应该查看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

不保证其中任何一个都能起作用,因为它们只是我的头脑,但如果他们没有,我会感到惊讶(这不是我见过的第一个或最后一个惊喜 - 测试得好。)

答案 1 :(得分:2)

这是一种不同的方式:

#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;
}

答案 2 :(得分:1)

找到行计数是一些更复杂操作的第一步吗?如果是这样,我建议您在不知道行数的情况下找到一种操作文件的方法。

如果你的唯一目的是统计线条,那么你必须阅读它们......计数!