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;
}
前面说道我需要让markdown文档中的图片按顺序重新命名,这样就需要更改markdown文档中所有markdown图片语法中图片的路径名称,修改路径名称的问题交给后面的程序去做,这里首先我们需要获取文档中图片的顺序,才可以进行下一步操作。
将源文件的docx后缀名更改为zip后缀,解压到当前目录。
按照图片步骤进行操作,即可获得符合文章顺序的图片
获取之后,查看文件名,基本符合要求,但是还需要统一添加一个前缀以防重复。
使用ReNamer工具统一添加前缀
参考资料中提供了多种实现读取txt文件中指定行数据的方法,按照题目需求可以选择其中的一种进行修改。下面简单介绍其中几种方法的思路:
基于 ifstream 和 getline() 函数的方法:将文件打开,并使用 getline() 函数逐行读取文件内容,使用循环从第一行开始遍历每一行,并依次进行计数器 t++,当 t 等于要读取的行号时,就将该行数据存入字符串中并终止循环。
基于 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;
}
在上述代码中,主要过程为:
打开指定的 txt 文件,若打开不成功则输出错误信息并停止程序,反之将文件的内容存储到 vector 中。
生成一个随机数种子,使用 rand() 函数随机产生一个数 rowNumber,范围是 [0, 行数 -1],然后使用 vector 的 size() 方法得到行数并依据 rowNumber 取出指定行里的内容并输出,即 rows[rowNumber]。
程序运行结束。
需要注意的是,当前的实现方案,只能随机读取一个行号,如果需要读取多个行号的数据,则需要多次重复上述操作。此外,也可以选择其他方案进行实现,以完成需求。