文件读取与字符抽取问题

leo_bin 2008-04-03 11:23:01
char pbyReadbuf[100];
CString tmpstr,temp;

if( !myFile.Open(_T("\\myfile.txt"), CFile::modeRead,&e) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
myFile.Read(pbyReadbuf,myFile.GetLength()+1);
//文件内容是“NO.\t\tName\t\tTest_ID\t\tTest_Date\t\tSex\t\tAge\t\tDepartment\t\tRemark\r\n”
pbyReadbuf[myFile.GetLength()] = '\0';
myFile.Close();


int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
pbyReadbuf, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
//tmpstr.GetBuffer(widecharlen); //为转换后保存Unicode字符串分配内存
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
pbyReadbuf,
-1,
tmpstr.GetBuffer(widecharlen), //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
);

int length = tmpstr.GetLength();
为什么length=0?
如果要读取的内容中的"NO."、“Name”等逐一抽取又如何操作呢?请各位指点一下。
...全文
27 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinCEC 2008-04-03
  • 打赏
  • 举报
回复
myFile.Read(pbyReadbuf,myFile.GetLength()+1); //为什么要加1?

可以直接用CString去等的

用:
tempstr = pbyReadbuf;

代替:
/*
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
pbyReadbuf, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
//tmpstr.GetBuffer(widecharlen); //为转换后保存Unicode字符串分配内存
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
pbyReadbuf,
-1,
tmpstr.GetBuffer(widecharlen), //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
);
*/


int length = tmpstr.GetLength();

CString 有find函数的.可以抽取

if (tempstr.find(_T("No.")));....
lenux 2008-04-03
  • 打赏
  • 举报
回复
tmpstr = pbyReadbuf;

这种做法会使cstring去自动找一个匹配的函数来处理字符的转换。

format是cstring的格式化函数,其中并不会处理字符的转换。

找个源代码看一眼就知道了。
leo_bin 2008-04-03
  • 打赏
  • 举报
回复
很好,谢谢!
还有一个问题:为什么我用tmpstr.format(_T("%s"),pbyReadbuf);,然后在显示就会乱码呢?

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧