您的位置:首页 > 其它

关与文本文件操作的一些收获

2014-11-14 23:57 183 查看
今天写了个将文本文件里的数据按一定转换为.XML文件里的规则的程序。

界面用的是MFC基于基本对话框。

第一个问题,获取要处理的文本文件的路径和文件名,用的是CFileDialog 类

void CGetFilePathDlg::OnButtonget()

{

// TODO: Add your control notification handler code here

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

"All Files(*.*)|*.*||",AfxGetMainWnd());
//构造文件打开对话框

CString strPath;
//声明变量

if(dlg.DoModal() == IDOK)
//判断是否按下"打开"按钮

{

strPath = dlg.GetPathName();
//获得文件路径

m_Path.SetWindowText(strPath);
//显示文件路径

第二个问题,打开相应文件,用的是C++标准文件库<fstream>

string infilename(strPath.GetBuffer(0));//将CString转换为string

string outfilename(infilename+".xml");//为了输出XML格式

ifstream infile(infilename.c_str());//开始处理过程,输入

ofstream outfile(outfilename.c_str());//输出

这里需要注意的是要把CString变量转换为string变量,用的是(strPath.GetBuffer(0)。还有就是ifstream infile(infilename.c_str());因为fstream构造函数不接受string,接受char,所以用.c_str()转换

第三个问题,处理文本并输出

string word,line;

//主要任务是下面的文本处理,判断

while(getline(infile,line))//一行行的操作

{

istringstream stream(line);

int i=0;

while(stream>>word)//一个单词一个单词的操作

{

i++;

if(i==1)

outfile<<"<daterule fielddesc=\""<<word;

if(i==2)

outfile<<"\" fieldname=\""<<word;

if(i==3)

outfile<<"\" fieldtype=\""<<word<<"\" ifexpress=\"0\"/>";

}

outfile<<"\n";

}

infile.close();

outfile.close();

这里涉及到的关键点(1)getline函数获取行,字符串流变量stream获取行里的单词。因为程序要基于每行实现,而具体处理则要操纵每行中每个单词。

(2)转义符\"和\n否者不能正确输出双引号和换行符

最后,很简单的一行命令,用来弹出提示窗口

MessageBox("文件处理成功");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: