gpt4 book ai didi

c++ - 转到文件中的特定行并阅读它

转载 作者:行者123 更新时间:2023-11-28 00:11:40 25 4
gpt4 key购买 nike

问题描述

我有一个包含一组行的文件。一个

文件 1:

"Hello How are you"

"The cat ate the mouse"

基于用户作为输入给出的行的开头和结尾。我想转到文件中的每一行并提取它。

例如,如果用户输入 117,那么我必须转到大小为 17< 的行 1/strong> 字符。他可以给出文件中的任何行号。

我阅读了以下答案 Read from a specific spot in a file C++ .但我并没有真正理解。为什么线条必须大小相同?如果我有关于文件中每一行的开头和结尾的信息。为什么我不能直接访问它?


源代码

我尝试使用以下受 Read Data From Specified Position in File Using Seekg 启发的代码但是我无法提取这些行,为什么?

    #include <fstream>
#include <iostream>

using namespace std::

void getline(int, int, const ifstream & );
int main()
{
//open file1 containing the sentences
ifstream file1("file1.txt");

int beg = 1;
int end = 17;
getline(beg,end, file1);

beg = 2;
end = 20;
getline(beg,end, file1);

return 0;
}

void getline(int beg, int end, const ifstream & file)
{
file.seekg(beg, ios::beg);
int length = end;

char * buffer = new char [length];

file.read (buffer,length);

buffer [length - 1] = '\0';

cout.write (buffer,length);
delete[] buffer;
}

最佳答案

此代码似乎使用行号作为字节偏移量。如果您寻求偏移“1”,文件将向前寻找 1 个字节,而不是 1 行。如果您寻求偏移量 2,文件将向前寻找 2 个字节,而不是 2 行。

要查找特定行,您需要读取文件并计算换行符的数量,直到找到您想要的行。已经有代码可以做到这一点,例如 std::getline()。如果你还不知道你想要的行的确切 byte 偏移量,你可以调用 std::getline() 的次数等于你想要的行号想要。

还要记住,文件的第一个字节位于偏移量 0 而不是偏移量 1,并且不同的平台使用不同的字节来指示行尾(例如,在 Windows 上它是 "\r\n",在 Unix 上是 "\n")。如果您使用库函数来读取行,则应为您处理好行尾。

关于c++ - 转到文件中的特定行并阅读它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32766817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com