MFC读取TXT文件的每一行到vector容器,并进行处理

void CFileSeparationDlg::OnBnClickedSelecttxt()
{
	
	CString strFile = _T("");

	CFileDialog    dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.txt)|*.txt|All Files (*.*)|*.*||"), NULL);

	if (dlgFile.DoModal())
	{
		strFile = dlgFile.GetPathName();
	}
	SetDlgItemText(IDC_EDIT4, strFile);
}
void CFileSeparationDlg::OnBnClickedStatistictxt()
{
	//CString text;
	CString m_SavePath;
	GetDlgItemText(IDC_EDIT4, m_TxtPath);
	//MessageBox(m_TxtPath);
	CString temp;
	
	string str;
	int d;
	vector<CString>Time;
	map<CString, int>Relation;//记录时间以及对应时间下的数量
	map<CString, int>::iterator iter;//迭代器
	int nRet;
	int curNum=0;
	CStdioFile file;
	CFile file2;
	m_SavePath = m_TxtPath.Mid(0, m_TxtPath.Find(_T("."))) + _T("NumStatistic.txt");
	//MessageBox(m_SavaPath);
	if (m_TxtPath=="")
	{
		MessageBox(_T("请先选择文件"));

	}
	else
	{
		file.Open(m_TxtPath, CFile::modeRead);		
		std::vector<CString> vecResult;
		CString strValue = _T("");
		while (file.ReadString(strValue))
		{
			vecResult.push_back(strValue);
		}
		file.Close();
		
		for (int j = 0; j < vecResult.size(); j++)
		{
			 str = CT2A(vecResult.at(j).GetBuffer(0));//转string,使用string的rfind函数
		     d = str.rfind(":");//最后一次出现冒号的索引
			temp= vecResult.at(j).Mid(d - 5, 8);
			//temp = vecResult.at(j).Mid(4, 8);
			//MessageBox(temp);
			nRet = std::count(Time.begin(), Time.end(), temp);//容器中是否有该名字,没有则创建以该名字命名的文件夹并保存图片,若有,则保存图片
			if (nRet == 0)
			{

				//MessageBox(_T("bu存在"));
				Time.push_back(temp);//去掉图片名字后缀后的字符串入栈
				curNum++;
			}
			else
			{
				curNum++;
			}
			if (Relation.find(temp) == Relation.end())//map容器中没有该key值
			{
				Relation.insert(make_pair(temp, curNum));
				curNum = 0;
			}
		
			}
		file2.Open(m_SavePath, CFile::modeCreate | CFile::modeReadWrite);
		CString sec;
		for (iter = Relation.begin(); iter != Relation.end(); iter++)
		{
			sec.Format(_T("%d"), iter->second);
			WORD unicode = 0xFEFF;  //这句重要,注意这里是F E FF,中间有个E
			file2.Write(&unicode, 2);  //这句重要
			file2.Write(iter->first, wcslen(iter->first) * sizeof(wchar_t));
			file2.Write(_T("的图片数量为:"), wcslen(_T("的图片数量为:")) * sizeof(wchar_t));  //这句重要
			file2.Write(sec, wcslen(sec) * sizeof(wchar_t));  //这句重要
			file2.Write(_T("\n"), 2);
			
			//MessageBox(iter->first);
		}
		file2.Close();
		MessageBox(_T("统计完成,请查看") + m_SavePath);

		}
	
}

在这里插入图片描述在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值