c++读取txt第n行数据

C++有什么代码可以实现从txt里面读取指定的第n行数据吗,
具体就是有一大堆数据,我要从里面随机选取一行,我认为可以用随机数确定行数,再去指定行提取那一行的数据

可采纳

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

using namespace std;

int main() {
    // 打开txt文件
    ifstream input("file.txt");
    if (!input.is_open()) {
        cout << "无法打开file.txt文件!" << endl;
        return 1;
    }

    // 读取第n行数据
    int n = 9; // 假设要读取第9行数据
    int count = 1;
    string line;
    while (getline(input, line)) {
        if (count == n) {
            cout << "第" << n << "行数据为:" << line << endl;
            break;
        }
        count++;
    }

    // 关闭txt文件
    input.close();

    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7671704
  • 这篇博客也不错, 你可以看下C++ 怎么依次读取多个TXT里面的数据,放到一个数组里面
  • 除此之外, 这篇博客: 程序读取txt文件(C++)识别图片语法进行修改中的 4.2 按照文章顺序获取word图片并批量改名 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 前面说道我需要让markdown文档中的图片按顺序重新命名,这样就需要更改markdown文档中所有markdown图片语法中图片的路径名称,修改路径名称的问题交给后面的程序去做,这里首先我们需要获取文档中图片的顺序,才可以进行下一步操作。
    将源文件的docx后缀名更改为zip后缀,解压到当前目录。
    在这里插入图片描述
    按照图片步骤进行操作,即可获得符合文章顺序的图片
    在这里插入图片描述
    获取之后,查看文件名,基本符合要求,但是还需要统一添加一个前缀以防重复。
    使用ReNamer工具统一添加前缀
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    参考资料中提供了多种实现读取txt文件中指定行数据的方法,按照题目需求可以选择其中的一种进行修改。下面简单介绍其中几种方法的思路:

    1. 基于 ifstream 和 getline() 函数的方法:将文件打开,并使用 getline() 函数逐行读取文件内容,使用循环从第一行开始遍历每一行,并依次进行计数器 t++,当 t 等于要读取的行号时,就将该行数据存入字符串中并终止循环。

    2. 基于 vector 和 getline() 函数的方法:将该 txt 文件的每一行存储到一个 vector 中,生成一个种子随机数作为要读取的行号,使用 vector 的 size() 方法确定 vector 的大小,然后通过 (rand() % size()) 计算出随机行号,直接在 vector 中取出该行数据并输出。

    下面是一种基于第二种方法的具体实现方案:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main() {
        vector<string> rows;            // 存储 txt 文件的每一行
        string filepath = "test.txt";   // txt 文件路径
        int rowNumber, count = 0;       // 要读取的行号和计数器
        string rowContent;              // 存储读取的行内容
        srand((unsigned)time(NULL));    // 产生随机数的种子
    
        ifstream inputfile(filepath);
        if (!inputfile) {
            cerr << "File open error!" << endl;
            exit(1);
        }
    
        // 将 txt 文件的每一行存储到 vector<string> 中
        while (getline(inputfile, rowContent)) {
            rows.push_back(rowContent);
        }
        inputfile.close();
    
        // 随机读取一行并输出
        rowNumber = rand() % rows.size();
        cout << "Random row number = " << rowNumber + 1 << endl;  // 行号从1开始
        cout << "Content of the random row:" << endl;
        cout << rows[rowNumber] << endl;
    
        return 0;
    }
    

    在上述代码中,主要过程为:

    1. 打开指定的 txt 文件,若打开不成功则输出错误信息并停止程序,反之将文件的内容存储到 vector 中。

    2. 生成一个随机数种子,使用 rand() 函数随机产生一个数 rowNumber,范围是 [0, 行数 -1],然后使用 vector 的 size() 方法得到行数并依据 rowNumber 取出指定行里的内容并输出,即 rows[rowNumber]。

    3. 程序运行结束。

    需要注意的是,当前的实现方案,只能随机读取一个行号,如果需要读取多个行号的数据,则需要多次重复上述操作。此外,也可以选择其他方案进行实现,以完成需求。