文件转换的一个小问题

wendysen 2009-09-16 09:48:04
文件转换中的问题;
源文件如下:
W 30 6000 6000 778376,-596704;
B 8000 49206 656718,31827;
P -1434086,999086 -634086,999086 -634086,159086 -614086,159086
-614086,299086 -634086,299086 -634086,999086 -448086,999086 -448086,201086;
P 867298,-118208 859298,-126208 853642,-120550 861642,-112550;
B 40000 225200 1136510,-712558;
B 406000 312000 778914,-339914;
...
...
先把文件的每句命令读到一个CString对象里,但后得到关键字和数据。
写了一个函数,得到每句的第一个大写字母,也就是语句的关键字了,但不知道为什么,每次执行一次是正确的,再多执行就是乱码了。
函数如下:

char GetKeyword(CString str) //str=("B 406000 312000 778914,-339914;")例如这样复制时候是正确
// 的,但放在文件中处理就错误了
{

char cc;
int i=0;

while(i<str.GetLength())
{
cc=str.GetAt(i);
if(cc==' ')
i++;
else break;
}
return cc;
}



放在文件中处理时候,是这样写的:
CStdioFile file("XXX.cif",CFile::modeRead);

CString CommandStr; //-------文件中的每一句命令
char * pbuf;
pbuf=new char[1]; //------暂时存放所读到的字符

DWORD filelength=file.GetLength(); //-------文件长度
char KeyWord;


vector <DWORD> vec;
vector <DWORD>::iterator vi;
char cc;




while(filelength>0)
{
file.Read(pbuf,sizeof(char));

if(*pbuf !=';')
{
CommandStr+=(*pbuf);
}

else
{
//得到命令字符串CommandStr,此时CommandStr为每句命令,而且正确

cc=GetKeyword(CommandStr);// 出错!!只有第一句处理的是正确的,后面要么空白要么乱码 //---------------------------------------------------命令处理 END

CommandStr=(""); //--------------------准备读取下一句命令

}

filelength--;
}


不知道我这样写哪里不对,为什么在整个文件处理的时候,得到关键字函数只有第一次执行正确,而后面都不正确呢??请大家给个建议啊!不胜感激

...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wendysen 2009-09-17
  • 打赏
  • 举报
回复
搞定了,是文件开头总有一个回车符,而不是空格,呵呵,所以判断条件错误。
wendysen 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lgtao 的回复:]
C/C++ code//不知道你是不是想得到每行的第一字母;//试试下面函数能不能满足您的要求,没测试的char GetKeyword(CString str)int i=0;while(i<str.GetLength()) {if (str.GetAt(i++)=='') {return str.GetAt(--i);
}
}
}

[/Quote]


出来后只是哦一些小方框,我觉得大概是什么地方格式不对.
5555 哪位大侠出手相救啊 ...
wendysen 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ylmbtm 的回复:]
这个自己跟一下,不就清楚了,代码也不多。
[/Quote]

不好意思啊,我还不太清楚咋“跟”...
雪碧爱可乐 2009-09-16
  • 打赏
  • 举报
回复

//不知道你是不是想得到每行的第一字母;
//试试下面函数能不能满足您的要求,没测试的
char GetKeyword(CString str)
int i=0;
while(i<str.GetLength()) {
if (str.GetAt(i++) == ' ') {
return str.GetAt(--i);
}
}
}

ylmbtm 2009-09-16
  • 打赏
  • 举报
回复
这个自己跟一下,不就清楚了,代码也不多。
wendysen 2009-09-16
  • 打赏
  • 举报
回复
也不都是每行一个命令,所以只好采用每个字符这样来读了。
schlafenhamster 2009-09-16
  • 打赏
  • 举报
回复
看你的格式是每行第一个字符是命令(或上行的数据),使用可以整行读出后处理,不要一个一个字符读。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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