本人乃一新手。想把一文件中的中文字读出来,
写到另外一个文件中。源程序如下: CString source,des,cur_line;
CStdioFile srcfile,desfile;
unsigned charcur_line[100] ;
int i;
if(!srcfile.Open("test.txt",CFile::modeRead|CFile::typeBinary)){
MessageBox("打开源文件出错");
srcfile.Close();
return; } while(srcfile.ReadString(source))
{
memset(cur_line,0,sizeof(cur_line));
memcpy(cur_line, source,sizeof(source)); for(i = 0 ; cur_line[i] != 0 ; ){
if((cur_line[i] > 160) && (cur_line[i+1] > 160)){
des += cur_line[i];
des += cur_line[i+1];
i += 2; }
else{
i+=1;
}
}
}
//MessageBox("中文文件:"+des);
srcfile.Close(); if(!desfile.Open("source.txt",CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)){
MessageBox("打开目标文件失败");
return;
}
else
desfile.WriteString(des);
desfile.Close();
return;
----------------------------------
test.txt 文件为
wo我是新手
、你是 高手谢谢2结果为
我、你谢谢另外,如果我不用数组转换,直接用CString 对象或指针
该如何实现呢???
写到另外一个文件中。源程序如下: CString source,des,cur_line;
CStdioFile srcfile,desfile;
unsigned charcur_line[100] ;
int i;
if(!srcfile.Open("test.txt",CFile::modeRead|CFile::typeBinary)){
MessageBox("打开源文件出错");
srcfile.Close();
return; } while(srcfile.ReadString(source))
{
memset(cur_line,0,sizeof(cur_line));
memcpy(cur_line, source,sizeof(source)); for(i = 0 ; cur_line[i] != 0 ; ){
if((cur_line[i] > 160) && (cur_line[i+1] > 160)){
des += cur_line[i];
des += cur_line[i+1];
i += 2; }
else{
i+=1;
}
}
}
//MessageBox("中文文件:"+des);
srcfile.Close(); if(!desfile.Open("source.txt",CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)){
MessageBox("打开目标文件失败");
return;
}
else
desfile.WriteString(des);
desfile.Close();
return;
----------------------------------
test.txt 文件为
wo我是新手
、你是 高手谢谢2结果为
我、你谢谢另外,如果我不用数组转换,直接用CString 对象或指针
该如何实现呢???
解决方案 »
- 判断是哪一个按钮响应的函数MFC
- 显示、剪切、保存jpg文件...
- IE工具栏制作~~高手请指教
- shutdown 一个 socket后怎样使他能恢复接受消息?
- 哪里有<VC技术内幕>第五版的源码下载啊? 找到马上结帖
- 求助多线程的端口扫描源程序,局域网探测源程序,路由跟踪源程序!高分相送!
- !!急啊!请问各位高手那有计算机图形学的光照模型技术和资料(网上)?
- 在WinXP下能HOOK API 吗?
- 还是编辑框的问题。。我都弄了三天了都没搞定,唉。。。
- 求助!请问哪位大哥知道DXF文件的各个要素对应的属性代码?
- 请问哪儿有inside ole2(OLE2高级编程技术)一书的例子源码下载?急
- 用DAO连接数据源可以不可以???
cur_line[i]改成char c=cur_line.GetAt(i)
这些东西以前处理过,现在有点忘了
汉字是这样判断的,
GetAt(i)是CString类的函数,
好像也不太行,我有空再试试
谢谢你
CStdioFile srcfil,desfil;
CString srcstr,desstr;
unsigned char q1,q2;
int i;
if(!srcfil.Open("test.txt",CFile::modeRead|CFile::typeBinary)){
MessageBox("打开源文件出错");
srcfil.Close();
return; } while (1)
{
if ( !srcfil.Read(&q1,sizeof(char))) break;
if (q1 < 160) {
continue;
} if ( !srcfil.Read(&q2, sizeof(char))) break; if(q2 < 160) {
continue;
}
desstr += q1;
desstr += q2;
}
MessageBox(desstr); srcfil.Close();
if(!desfil.Open("source.txt",CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)){
MessageBox("打开目标文件失败");
return;
}
else
desfil.WriteString(desstr);
desfil.Close();
MessageBox("写目标文件成功!");
return;
}
CString str="123中a华bz,1。2;3人2喆*";//喆
CString changestr;
changestr="";
CString show;
CString strTemp;
show="";
int len = str.GetLength();
for(int i = 0;i<len;i++)
{
strTemp.Format("%02X,",(unsigned char)str[i]);
show+=strTemp;
if(((unsigned char)(str.GetAt(i))>0x81) && ((unsigned char)(str.GetAt(i))<0xFE) )//如果属于汉字;str.GetAt(i))>0xaf && (str.GetAt(i)<0xfe)喆
{
changestr+=str.Mid(i,2);
i++;
strTemp.Format("%02X,",(unsigned char)str.GetAt(i));
show+=strTemp;
}
else{
//AfxMessageBox("不是汉字!");
}
}
str+="\r\n";
show=str+show;
show+="\r\n";
show+=changestr;
//AfxMessageBox(show);
AfxMessageBox(str+changestr);
谢谢大家
有谁能告诉我的程序问题出在哪里呢?
if(nLength>=100)
{
nLength=99;
}
memcpy(cur_line, source.GetBuffer(nLength),sizeof(char)*nLength);
source.ReleaseBuffer();
{
memset(cur_line,0,sizeof(cur_line));
memcpy(cur_line, source,sizeof(source));
for(i = 0 ; cur_line[i] != 0 ; ){
if((cur_line[i] > 160) && (source[i+1] > 160)){
des += source[i];
des += source[i+1];
i += 2;
}
else{
i+=1;
}
}
*/
while(srcfile.ReadString(cur_line))
{
int nLength=source.GetLength();
for(i = 0 ; i<(nLength-1) ; ){
if((cur_line[i] > 160) && (cur_line[i+1] > 160)){
des += cur_line[i];
des += cur_line[i+1];
i += 2;
}
else{
i+=1;
}
}
}