问简单的文件读取问题。

wilson2004 2004-04-05 12:35:58
文件内容如下:
SD 1 1 178 123 1 195 106 1 0
DD 5 5 267 85 1 299 57 57 0
......
SD 9 7 287 89 2 304 105 57 0
DD 10 10 515 85 3 492 57 60 0
DX 1 D1 150 113 0
LX 11 S1 329 92 1
......
DX 22 D2 655 134 1
LX 81 SF 726 92 1
然后用下面的语句读取:
CString buf;
CString strtemp1, strtemp2, strtemp3;
int m = 0, n = 0;
int itemp1 = 0, itemp2 = 0, itemp3 = 0, itemp4 = 0, atrr = 0;
int x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0;
BOOL engross = 0;

while (file.ReadString(buf)) {
strtemp1 = strtok(buf.GetBuffer(0), " ");
if (strtemp1 == "SD" || strtemp1 == "DD" ) {
buf.Format("%s %d %s %d %d %d %d %d %d %d",
strtemp1, itemp1, strtemp2, x1, y1, atrr,
x2, y2, itemp2, engross);
pDoc->branch[m].InitData(strtemp1, itemp1, strtemp2,
x1, y1, atrr, x2, y2, itemp2, engross);
}
if (strtemp1 == "DX" || strtemp1 == "LX") {
buf.Format("%S %d %s %d %d %d",
strtemp1, &itemp1, strtemp2, &x1, &y1, &atrr);
pDoc->signal[n++].InitData(strtemp1, itemp1, strtemp2,
x1, y1, atrr);
}
}
但实际上只能读取strtemp1,这是什么原因?
应该怎么改?
谢谢!!
...全文
68 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2004-04-05
  • 打赏
  • 举报
回复
检查sscanf的返回数值,它告诉你成功读入了几个数据,看看问题在那里

另外的做法是,把数据按照空格分段,转换成为一些独立的字符串,然后分别处理
wilson2004 2004-04-05
  • 打赏
  • 举报
回复
不行啊。
happyparrot帮我看看
我的程序哪里有问题?
或者有其他办法吗?
谢谢!
快乐鹦鹉 2004-04-05
  • 打赏
  • 举报
回复
不知道sscanf行不行。
wilson2004 2004-04-05
  • 打赏
  • 举报
回复
哦,我改成:
sscanf(buf.GetBuffer(0), "%s %d %s %d %d %d %d %d %d %d",
strtemp1, &itemp1, strtemp2, &x1, &y1, &atrr,
&x2, &y2, &itemp2, &engross);
sscanf(buf.GetBuffer(0), "%S %d %s %d %d %d",
strtemp1, &itemp1, strtemp2, &x1, &y1, &atrr);
怎么还是不行啊?
快乐鹦鹉 2004-04-05
  • 打赏
  • 举报
回复
buf.Format("%s %d %s %d %d %d %d %d %d %d",
strtemp1, itemp1, strtemp2, x1, y1, atrr,
x2, y2, itemp2, engross);
-------------
CString的Format是将strtemp1,itemp1等格式化到buf中去。与你的想法刚好相反。
itmaster 2004-04-05
  • 打赏
  • 举报
回复
循环的又问题啊???
while (file.ReadString(buf)) {
strtemp1 = strtok(buf.GetBuffer(0), " ");
if (strtemp1 == "SD" || strtemp1 == "DD" ) {
buf.Format("%s %d %s %d %d %d %d %d %d %d",
strtemp1, itemp1, strtemp2, x1, y1, atrr,
x2, y2, itemp2, engross);
pDoc->branch[m].InitData(strtemp1, itemp1, strtemp2,
x1, y1, atrr, x2, y2, itemp2, engross);
}
if (strtemp1 == "DX" || strtemp1 == "LX") {
buf.Format("%S %d %s %d %d %d",
strtemp1, &itemp1, strtemp2, &x1, &y1, &atrr);
pDoc->signal[n++].InitData(strtemp1, itemp1, strtemp2,
x1, y1, atrr);
}
}
wwzwwz427 2004-04-05
  • 打赏
  • 举报
回复
CStdioFile file;在那个类库中
wilson2004 2004-04-05
  • 打赏
  • 举报
回复
现在差不多了。
主要是 ymbymb说的原因。
谢谢大家!!
快乐鹦鹉 2004-04-05
  • 打赏
  • 举报
回复
我刚才试了:
CStdioFile file;
file.Open("C:\\aaa1.txt",CFile::modeRead);
CString str;
file.ReadString(str);
file.Close();
int i1,i2,i3,i4,i5;
float f1;

int num = sscanf(str.GetBuffer(0), "%f %d %d %d %f %d",
&i1, &i2, &i3, &i4, &f1, &i5);
数据都能够正确读出来的。
数据是:100 200 300 400 5.8 60
你再仔细调试一下。方法是可以的。
ymbymb 2004-04-05
  • 打赏
  • 举报
回复
因为你执行strtemp1 = strtok(buf.GetBuffer(0), " ");后buf 的值已经变成"SD"了,所以后面的操作不对了,如下改
CString sTemp = buf;
strtemp1 = strtok(sTemp.GetBuffer(0), " ");
zhangcrony 2004-04-05
  • 打赏
  • 举报
回复
Check what you get in "strtemp1", is it the proper value you want?

16,548

社区成员

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

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

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