如何计算输入文件的行数?

时间:2015-10-29 18:24:46

标签: c++

我知道输入文件的每一行都包含五个数字,我希望我的c ++程序能够在不询问用户的情况下自动确定文件中有多少行。有没有办法在不使用getline或字符串类的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

我就是这样做的......

#include <iostream> 
#include <fstream>

using namespace std;

int main()
{
    string fileName = "Data.txt";
    std::ifstream f(fileName, std::ifstream::ate | std::ifstream::binary);
    int fileSize = f.tellg() / 5 * sizeof(int);

    return 0;
}

代码假定一个名为Data.txt的文件,并且每行上的5个数字都是int类型,并且不用空格或分隔符分隔。请记住,在文本文件的情况下,每一行都将终止到换行符,因此这种技术(不考虑它们)会产生误导性结果。

答案 1 :(得分:0)

当然,您只需读取文件,同时检查转义序列。请注意,\n转义序列在写入时转换为系统特定的换行符转义序列,反之亦然,在文本模式下读取

通常,此代码段可能会对您有所帮助。

鉴于文件 somefile.txt

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

编译以下代码并输入文件名 somefile.txt

#include <iostream>
#include <fstream>

inline size_t newlineCount (std::istream& stream)
{
    size_t linesCount = 0;
    while (true)
    {
        int extracted = stream.get();
        if (stream.eof()) return linesCount;
        else if (extracted == '\n') ++linesCount;
    }
}

int main(int argc, char* argv[])
{
    std::string filename;
    std::cout << "File: ";
    std::cin >> filename;
    std::ifstream fileStream;
    fileStream.exceptions(fileStream.goodbit);
    fileStream.open(filename.c_str(), std::ifstream::in);
    if (!fileStream.good())
    {
        std::cerr << "Error opening file \"" << filename << "\". Aborting." << std::endl;
        exit(-1);
    }
    std::cout << "Lines in file: " << newlineCount(fileStream) << std::endl;
    fileStream.close();
}

提供输出

File: somefile.txt
Lines in file: 4