VS 2017 MFC 读取含有中文TXT文件
1、含有中文TXT文件编辑
1.1 编辑含有中文字符的txt文件
1.2 另存为,编码要选择ANSI
2、代码编辑
2.1 设计MFC界面,添加button控件,Caption改为导入文件数据
2.2 定义变量 添加了一个data类,使用了vector容器
#pragma once
#include <vector>
using namespace std;
class data
{
public:
data(void);
~data(void);
};
class manuscript1
{
public:
vector<int> XH;//序号
vector<CString> ZZXM;//第一作者名字
vector<CString> GJMC;//稿件名称
vector<CString> TGRQ;//投稿日期
vector<CString> ZZSF;//作者的省份
vector<CString> FBRQ;//发表日期
vector<CString> SGYJ;//审稿意见
};
2.2 为button控件添加函数,实现含有中文的txt读取
代码重点
char* old_locale = _strdup(setlocale(LC_CTYPE, NULL));
使用完要释放
setlocale(LC_CTYPE, old_locale);
free(old_locale);
控件完整函数
//文件方式导入
void CmanuscriptDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_list1.DeleteAllItems();
CString strFilter, fileName;
strFilter = "Text Files(*.txt)|*.txt||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST, strFilter);
CString m_strRead;
if (dlg.DoModal() == IDOK)//显示打开文件对话框
{
fileName = dlg.GetPathName();
}
CStdioFile file;
vector<CString> hang;
CString temp;
char* old_locale = _strdup(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, "chs");
if (NULL != file.Open(fileName, CFile::modeRead))
{
while (file.ReadString(temp))
{
hang.push_back(temp);
}
file.Close();
}
else
{
AfxMessageBox(L"文件打开失败");
}
setlocale(LC_CTYPE, old_locale);
free(old_locale);
CString a, b, c, d, e, f, g;
USES_CONVERSION;
for (int i = 0; i < hang.size(); i++)
{
a = strtok(T2A(hang[i]), ",");
manuscript11.XH.push_back(_ttoi(a));
b = strtok(NULL, ",");
manuscript11.ZZXM.push_back(b);
c = strtok(NULL, ",");
manuscript11.GJMC.push_back(c);
d = strtok(NULL, ",");
manuscript11.TGRQ.push_back(d);
e = strtok(NULL, ",");
manuscript11.ZZSF.push_back(e);
f = strtok(NULL, ",");
manuscript11.FBRQ.push_back(f);
g = strtok(NULL, ",");
manuscript11.SGYJ.push_back(g);
CString XH, GS;
GS.Format(_T("%d"), i);
XH.Format(_T("%d"), i + 1);
m_list1.InsertItem(i, GS);
m_list1.SetItemText(i, 0, a);
m_list1.SetItemText(i, 1, b);
m_list1.SetItemText(i, 2, c);
m_list1.SetItemText(i, 3, d);
m_list1.SetItemText(i, 4, e);
m_list1.SetItemText(i, 5, f);
m_list1.SetItemText(i, 6, g);
}
}
3、运行效果