首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查找一个文件的行数?

如何查找一个文件的行数?
EN

Stack Overflow用户
提问于 2010-11-03 12:22:07
回答 3查看 4.9K关注 0票数 2

例如:

代码语言:javascript
运行
复制
file_ptr=fopen(“data_1.txt”, “r”);

如何找到文件中的行数?

EN

回答 3

Stack Overflow用户

发布于 2010-11-03 12:25:29

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

您应该查看用于读取字符的fgetc(),并记住它将在文件末尾返回EOF,而对于行尾字符则返回\n

然后,您只需确定最后一个不完整的行(即文件末尾没有换行符)是否是一行。我自己也会说是的。

下面是我怎么做的,当然是伪代码,因为这是家庭作业:

代码语言:javascript
运行
复制
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

对于这种级别的问题,可能没有必要扩展它来处理不完整的最后一行。如果是这样的话(或者你想获得额外的学分),你可以看看:

代码语言:javascript
运行
复制
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

不能保证它们中的任何一个都会工作,因为它们就在我的脑海中,但如果它们不能工作,我会感到惊讶(但这不会是我见过的第一个或最后一个惊喜--好好测试一下)。

票数 9
EN

Stack Overflow用户

发布于 2010-11-03 12:50:00

这里有一种不同的方式:

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2010-11-03 12:25:17

查找行数是一些更复杂操作的第一步吗?如果是这样的话,我建议您找到一种方法来操作这个文件,而不需要事先知道行数。

如果您的唯一目的是计算行数,那么您必须阅读它们,并且...数数!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4084205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档