龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

在VC++应用程序中读取文本数据(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
4、 给“读取文本数据”添加相应的单击消息响应函数。代码如下: void CReadCoodinateView::OnReaddata() { // TODO: Add your command handler code here CFileDialog dlg(TRUE); // 定

4、 给“读取文本数据”添加相应的单击消息响应函数。代码如下:

void CReadCoodinateView::OnReaddata()
{
       // TODO: Add your command handler code here
       CFileDialog dlg(TRUE); // 定义一个文件对话框变量
       if(dlg.DoModal()==IDOK)  
       {
       CString m_FilePath = dlg.GetPathName(); //取得文件路径及文件名
       CStdioFile File;
       File.Open(m_FilePath,CFile::modeRead); //以读模式打开文本文件
   CString FileData;        //定义一个CString变量作为缓冲区
   File.ReadString(FileData);//读取第一行数据,第一行数据为坐标点数据
   /*定义两个临时字符串,并初始化为'\0'*/
   char TempStr1[10];
   char TempStr2[10];
   memset(TempStr1,'\0',10);
   memset(TempStr2,'\0',10);
   sscanf(FileData,"%s",TempStr1);
   m_PointNum = atoi(TempStr1);   // 获取坐标点个数
   /*逐行读取坐标数据*/
   for (int i = 0;i<m_PointNum;i++)
   {
      File.ReadString(FileData);
         sscanf(FileData,"%s %s",TempStr1,TempStr2);
         m_PointArray.Add(CPoint(atoi(TempStr1),atoi(TempStr2)));//将其存入坐标点数组
   }
   
   CDC *pDC = GetDC(); //获取设备环境;
   /*根据坐标点绘出直线*/
   for (i = 0;i<m_PointNum-1;i++)
   {
  
        pDC->MoveTo(m_PointArray[i].x,m_PointArray[i].y);
        pDC->LineTo(m_PointArray[i+1].x,m_PointArray[i+1].y);
     
   }
  ReleaseDC(pDC);  //使用完后,释放设备环境
       }
}
程序运行结果的效果图如下:

1.选取一个txt文件
 
2.单击确定后绘制直线,如下图:

其中示例数据文件的格式是这样的:(第一行为坐标个数,余下的是坐标点数据)
5
10  20
30  40
45  85
100  120
200  300
 
这个程序的一个优点是对文本数据格式并不严格,你可以把数据编辑成下面形式,但读出来的效果是一样的,(只要x坐标和y坐标中间有一个空格就可以了)
  5
             10        20
   30        40
  45                 85
  100                        120
200         300
 
三.小结

上面只是小小的示例,读者朋友可以将文本数据传化为其它形式的数据(如将字符型数据转化为浮点型),进行更复杂的数据处理,其中原理是一样的。上面程序的编译环境是:Win2000,VC++6.0。

精彩图集

赞助商链接