首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,读取自定义的数据文本文件有关问题,着你的指点

2012-02-14 
高手请进,读取自定义的数据文本文件问题,急急急~~~在线等着你的指点.文本格式如下:0c:\sample\1.bmp102115

高手请进,读取自定义的数据文本文件问题,急急急~~~在线等着你的指点.
文本格式如下:
0     c:\sample\1.bmp   10   211   50   50
1     c:\sample\2.bmp   30   72   50     50
0     c:\sample\3.bmp   130   32   50   50
解释:
开始0或1为类别   而后依次给出目标的路径,而后为目标的左上角X坐标、左上角Y坐标、宽度和长度,以tab键分隔。
比如第一个样本类别0,位于C:\sample\1.bmp中以(10,   211)为左上角、长宽各50的区域中,以此类推...个数不限,有很多个数据

将这样的脚本文件载入,并保存为如下定义的struct数组
          struct   tag_areainfo   {
          char   szPath[256];
          int   iLeft;
          int   iTop;
          int   iWidth;
          int   iHeight;
          int   iLabel;
            }   m_arrAreaInfo[MAX_AREA];
每行的信息保存在数组的一个元素中,并将区域的个数保存在m_iAreaCount中。
  int   iLabel   用来存储类别信息。MAX_AREA是一个常数(用#define定义为256),如果脚本文件中的区域个数超过了这个常数,则程序自动结束;如果在读取文件的过程中发现与预定义的格式不符,也立即结束程序。

小弟求各位高手大哥帮帮忙写出程序.....本人感激不尽> > > > > 谢谢




[解决办法]
#include <fstream>
#include <strstream.h>
using namespace std;

ifstream inf(文件名);//生成输入文件流
char inbuf[81];

while(inf.getline(inbuf,81))//此处我修改为了getline,读取一行到inbuf缓冲区
{
istrstream ins(inbuf, strlen(inbuf));//由生成的inbuf生成输入字符串流
ins> > m_arrAreaInfo[i].iLabel> > m_arrAreaInfo[i].iLeft> > m_arrAreaInfo[i].iTop> > m_arrAreaInfo[i].iWidth> > m_arrAreaInfo[i].iHeight;//从输入字符串流中读取相应的数值到对应类型的变量中
ins.getline(m_arrAreaInfo[i].szPath,256);//获取剩下的字符串,这也是为什么我希望你将路径放置到最后的原因,这样便于处理
}

热点排行