MFC 去重文本文件:快速高效的代码示例
以下是一个使用 MFC 框架实现快速将文本文件内容去重的示例代码:
#include <afxwin.h>
#include <iostream>
#include <fstream>
#include <unordered_set>
class CFileDuplicateRemover : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CFileDuplicateRemover::InitInstance()
{
CWinApp::InitInstance();
// 打开文件对话框
CFileDialog fileDialog(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, _T("文本文件 (*.txt)|*.txt||"));
if (fileDialog.DoModal() == IDOK)
{
CString filePath = fileDialog.GetPathName();
// 打开文件
std::ifstream inputFile(filePath);
if (!inputFile)
{
AfxMessageBox(_T("无法打开文件!"));
return FALSE;
}
// 去重
std::unordered_set<CString> uniqueLines;
CString line;
while (inputFile >> line)
{
uniqueLines.insert(line);
}
// 关闭文件
inputFile.close();
// 将去重后的内容写入新文件
CString outputFilePath = filePath.Left(filePath.ReverseFind(_T('.'))) + _T("_nodup.txt");
std::ofstream outputFile(outputFilePath);
if (!outputFile)
{
AfxMessageBox(_T("无法创建输出文件!"));
return FALSE;
}
for (auto it = uniqueLines.begin(); it != uniqueLines.end(); ++it)
{
outputFile << *it << std::endl;
}
// 关闭文件
outputFile.close();
AfxMessageBox(_T("去重完成!"));
}
return FALSE;
}
CFileDuplicateRemover theApp;
此代码使用了 MFC 的 CFileDialog 类来打开文件对话框,让用户选择要去重的文本文件。然后使用 std::ifstream 和 std::ofstream 来读取和写入文件内容。使用 std::unordered_set 来存储去重后的内容,并使用 CString 作为存储文本行的数据类型。
去重后的内容将写入一个新的文件,新文件名为原文件名加上 '_nodup' 后缀。例如,如果原文件名为 'example.txt',则新文件名为 'example_nodup.txt'。
注意:此代码仅适用于 Windows 平台,因为它依赖于 MFC 框架。如果您想在其他平台上运行,请考虑使用其他 C++ 库,如 STL 和 Boost。
原文地址: https://www.cveoy.top/t/topic/qyRh 著作权归作者所有。请勿转载和采集!