在 C++有没有办法转到文本文件中的特定行?

发布于 2024-10-20 15:23:36 字数 55 浏览 2 评论 0原文

如果我使用 fstream 打开文本文件,是否有一种简单的方法可以跳转到特定行,例如第 8 行?

If I open a text file using fstream is there a simple way to jump to a specific line, such as line 8?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

[浮城] 2024-10-27 15:23:36

绕你的路去那里。

#include <fstream>
#include <limits>

std::fstream& GotoLine(std::fstream& file, unsigned int num){
    file.seekg(std::ios::beg);
    for(int i=0; i < num - 1; ++i){
        file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
    return file;
}

file的查找指针设置为行num的开头。

测试包含以下内容的文件:

1
2
3
4
5
6
7
8
9
10

测试程序:

int main(){
    using namespace std;
    fstream file("bla.txt");

    GotoLine(file, 8);

    string line8;
    file >> line8;

    cout << line8;
    cin.get();
    return 0;
}

输出:8

Loop your way there.

#include <fstream>
#include <limits>

std::fstream& GotoLine(std::fstream& file, unsigned int num){
    file.seekg(std::ios::beg);
    for(int i=0; i < num - 1; ++i){
        file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
    return file;
}

Sets the seek pointer of file to the beginning of line num.

Testing a file with the following content:

1
2
3
4
5
6
7
8
9
10

Test program:

int main(){
    using namespace std;
    fstream file("bla.txt");

    GotoLine(file, 8);

    string line8;
    file >> line8;

    cout << line8;
    cin.get();
    return 0;
}

Output: 8

拍不死你 2024-10-27 15:23:36

如果每行的长度相同,则可以使用 istream::seekg( ) 跳转到该位置并从那里读取。

If every line has the same length then you can use istream::seekg() to jump to the location and read from there.

何以畏孤独 2024-10-27 15:23:36

如果行具有相同的长度,这是一个使用 std::getline() 的有效且简洁的示例:

#include <iostream>
#include <fstream>
#include <string>

const int LINE = 4;

int main() {
std::ifstream f("FILE.txt");
std::string s;

for (int i = 1; i <= LINE; i++)
        std::getline(f, s);

std::cout << s;
return 0;
}

Here is a working and neat example with std::getline() if the lines have the same length:

#include <iostream>
#include <fstream>
#include <string>

const int LINE = 4;

int main() {
std::ifstream f("FILE.txt");
std::string s;

for (int i = 1; i <= LINE; i++)
        std::getline(f, s);

std::cout << s;
return 0;
}
无语# 2024-10-27 15:23:36

一般来说,,您必须使用类似于Xeo 显示

如果为 netrom 说你知道这些线有固定长度,是的

即使事先不知道行的长度,但是(1)你会想要经常跳来跳去,并且(2)你可以保证在你可以制作一个文件的同时没有人会弄乱你的文件pass 形成索引,然后使用它。

In general, no, you have to walk down using a strategy similar to what Xeo shows.

If as netrom says you know the lines have fixed length, yes.

And even if the line lengths are not known in advance, but (1) you're going to want to jump around a lot and (2) you can guaranteed that no one is messing with your file in the mean time you could make one pass to form a index, and use that thereafter.

走野 2024-10-27 15:23:36

你也可以使用 while 循环

fstream f;
f.open("bla.txt", ios_base::in);

int i = 1;
int line = 8;

while(i != line){
    f.ignore(1000, '\n');
    ++i;
}
string fContent;
f >> fContent;
cout << fContent;

注意:先创建文件

you can use while loop as well

fstream f;
f.open("bla.txt", ios_base::in);

int i = 1;
int line = 8;

while(i != line){
    f.ignore(1000, '\n');
    ++i;
}
string fContent;
f >> fContent;
cout << fContent;

Note: create the file first

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文