【问题标题】:C++ how to read only few lines from a fileC ++如何从文件中只读取几行
【发布时间】:2016-10-08 17:12:15
【问题描述】:

我试图从我的文件中只读取 10 或 100 行。有什么办法可以让我读到这样的某行吗?

【问题讨论】:

  • 拜托,谷歌,你会找到你需要的一切。
  • 嗯,我已经尝试过了,但找不到我要找的东西。这就是我在这里问的原因。我没有找到只从文件中读取单独行的解决方案。
  • 真的吗?你找不到read from file only one specific line to another in C++,我是通过查看本页右侧(招聘广告下方)的相关问题列表找到的?当您在此处输入问题时,它作为可能的副本提供。显然,您在此处发布之前没有花任何时间查看。
  • 是的,但我的问题有点不同。我有很多行,没有一个是空的,所以我不能使用任何分隔符来跳过行。显然,我以错误的方式陈述了我的问题。从文件读取时,我需要创建类似循环的东西。我试图问是否有任何方法可以阅读前 100 行或类似的内容。或者我怎样才能从特定行开始阅读?这些是我一直在寻找却找不到的东西。还是要谢谢你的帮助。我明白你虽然我没有寻找第二个。 @KenWhite
  • 另一篇文章告诉你如何阅读文本行,它包含一个从第 6 行读取到第 10 行的循环。是否有空行无关紧要;您仍在从文件中读取一行,无论它是否为空行。如果您想阅读前 10 行,请从第一行开始并重复循环 10 次。如果要阅读 100 行,则从第 1 行开始并重复循环 100 次。如果你想从第 10 行读到第 20 行,你阅读前 9 行并忽略它们,然后当你到达第 10 行时开始关注。

标签: c++ file


【解决方案1】:

要从文件中读取单行行,请使用:

std::string text_from_file;
std::getline(text_file_stream, text_from_file);

在 C++ 中,要多次执行一个动作,我们使用循环。因此,要从文件中读取 10 行,我们将使用 for 循环:

for (unsigned int i = 0U; i < 10U; ++i)
{
  std::getline(text_file_stream, text_from_file);
}

另一种方法:

unsigned int lines_read = 0U;
while ((lines_read < 10) && (std::getline(text_file_stream, text_from_file)))
{
  ++lines_read;
}

要读取 100 行,您需要将常数从 10 更改为 100。

跳线
跳行或寻找给定行的根本问题是文本文件具有可变长度的记录。您必须阅读每一行以找出下一行的开始位置。

因此,跳过行的技术是将一行读入文本变量并忽略它,就像上面的示例一样。

有一些方法可以加快速度,但它们涉及将大块数据读入内存或将文件视为内存(也称为内存映射)。这种技术的一个问题是处理您想要的文本行穿过缓冲区末尾的情况(它没有完全在缓冲区中)。这些技术可以在 StackOverflow 或 Internet 上的其他帖子中找到。

一直读到分隔符
delimiter 是表示文本结束的东西。文本文件的标准分隔符是换行符。通过使用std::getline 的第三个参数,您可以阅读文本直到逗号、句点制表符或其他分隔符。

const char delimiter = '.';
std::string text_from_file;
std::getline(text_data_stream, text_from_file, delimiter);

所有这些都可以在好教科书或a good online reference 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多