前几天突发奇想,想找一些计算机专业的常用英语词汇来背。但是“bu背单词”官方并没有一本计算机专业相关的词书,不过它有自定义词书功能,它能识别的文件是.txt格式的文本文件。.txt文件里面要求是“一行一个单词”。可以去它的官网https://www.bbdc.cn/,登录自己的账号,上传准备好的文本文件,然后它就会自动识别正确的单词,导出你要的词书。
于是在网上搜索“计算机专业常用英语词汇”。
有一个非常“整齐”的txt文件,如下:
这样一来就可以利用代码来将不需要的内容删掉,也就是把每一行的单词提取出来。
废话少说,直接上代码:
/********************************************************
Description: 文件操作:读取指定行,删除指定行,修改指定行
********************************************************/
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
using namespace std;
/************************************
@ Brief: 读取指定行数据
@ Return:
************************************/
void ReadLineData(char* fileName, int lineNum, char* data)
{
ifstream in;
in.open(fileName);
int line = 1;
while (in.getline(data, 1024))
{
if (lineNum == line)
{
break;
}
line++;
}
in.close();
}
/************************************
@ Brief: 字符串转string类型
@ Return:
************************************/
string CharToStr(char* contentChar)
{
string tempStr;
for (int i = 0; contentChar[i] != '\0'; i++)
{
tempStr += contentChar[i];
}
return tempStr;
}
/************************************
@ Brief: 删除指定行
@ Return:
************************************/
void DelLineData(char* fileName, int lineNum)
{
ifstream in;
in.open(fileName);
string strFileData = "";
int line = 1;
char lineData[1024] = { 0 };
while (in.getline(lineData, sizeof(lineData)))
{
if (line == lineNum)
{
strFileData += "\n";
}
else
{
strFileData += CharToStr(lineData);
strFileData += "\n";
}
line++;
}
in.close();
//写入文件
ofstream out;
out.open(fileName);
out.flush();
out << strFileData;
out.close();
}
/************************************
@ Brief: 修改行数据
@ Return:
************************************/
void ModifyLineData(char* fileName, int lineNum, char* lineData)
{
ifstream in;
in.open(fileName);
string strFileData = "";
int line = 1;
char tmpLineData[1024] = { 0 };
while (in.getline(tmpLineData, sizeof(tmpLineData)))
{
if (line == lineNum)
{
strFileData += CharToStr(lineData);
strFileData += "\n";
}
else
{
strFileData += CharToStr(tmpLineData);
strFileData += "\n";
}
line++;
}
in.close();
//写入文件
ofstream out;
out.open(fileName);
out.flush();
out << strFileData;
out.close();
}
int main()
{
char lineData[1024] = { 0 };
char str[] = "C:\\Users\\MyWIN10\\Desktop\\words.txt";//文件地址字符串
int LINENUMBER = 1659;//要处理文件的行数
for (int i = 1; i <= LINENUMBER; i++) {
ReadLineData(str, i, lineData);//提取文件的第i行放到linData中
// 定义正则表达式模式,提取第一个"."到第一个","之间的字符
regex pattern("\\.(.*?),");
// 使用std::smatch来存储匹配结果
smatch match;
// 使用std::regex_search查找匹配
if (regex_search(input, match, pattern)) {
// 检查是否找到匹配项并且匹配结果的大小是否足够大
if (match.size() > 1) {
string result = match[1];
// 将匹配结果复制回lineData
strncpy_s(lineData, result.c_str(), sizeof(lineData));
lineData[sizeof(lineData) - 1] = '\0';
ModifyLineData(str, i, lineData);//将第i行数据修改为linData字符串
}
}
else {
cout << "第" << i << "行未找到匹配项" << endl;
}
}
}
那几个操作文件的函数是我抄的,哈哈哈。
运行上面的代码就可以发现原来的words.txt修改成功了。
拿着这个修改成功的txt文件去“bu背单词”官网上传词书,再等个几分钟,开背!