只读文本文件中的给定行

Read only given line from text file?

本文关键字:文本 文件 只读      更新时间:2023-10-16

C++中有没有一种方法可以获取一个给定大小的随机数,然后从文本文件中读取该行?不需要跨过所有的线?我有这个,它只是一行一行打印出来:

#include <cstdio>
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc, char* argv[]){
    ifstream myReadFile;
    myReadFile.open("words.txt");
    char output[100];
    if (myReadFile.is_open()) {
        while (!myReadFile.eof()) {
            printf("n");
            myReadFile >> output;
            cout<<output;
        }
    }
    myReadFile.close();
    return 0;
}

除非通过其他方法知道每一行的大小,否则无法做到这一点。然后,您可以将要跳过的行的大小相加,并执行seekg以跳到行的开头。

通常情况下,否:行是用一个特殊字符分隔的,您的程序需要读取所有字符,并计算换行符才能执行所需操作。

在特殊情况下,当你的行都是相同的长度时(这在编程比赛中比在实践中更常见),你可以将文件读取指针重新定位到特定的位置,然后从那里读取你的行。

附言:我在实践中唯一看到它的地方是UUENCODEd文件。

不需要跨过所有的线?

AFAIK,编号

为了读取文件中的一行,您必须了解该行是由'\n'字符分隔的。因此,不管怎样,您都必须读取整个文件。

有一个seekg,您可以使用它前进到文件中的特定地址。但是,除非你能保证每条线的长度,否则你不能确定你的随机偏移是否真的开始于一条新行。

顺便说一句,问题中给定的代码实际上一次只读一个单词,而不是一次读一行。要一次读取整行,请使用std::getline