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

本文介绍在VC++应用程序中读取文本数据的方法,包括程序原理、编程步骤和示例,展示了如何从txt文件中读取数据并进行处理,适用于处理地质等领域的数据。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

作者:朱金灿

来源:http://blog.csdn.net/clever101


我们通常把数据存诸在txt文件上,但是我们通常要把这些数据取出来并进行处理。下面我将介绍一种在VC++应用程序中读取文本数据的方法。

一.前言

因为经常要处理地质方面的数据。但是很多数据它不是直接存贮在数据库文件(如Access文件等),而是存贮在txt文件。经常有同学问我怎么通过编程读取实现文本文件中的数据。其实存贮在txt文件也有它的好处,不像读取Access文件那样要注册数据源,设置比较麻烦,编写读取程序也比较复杂。

 

二.程序原理

首先我们知道假如要进行的文件操作只是简单的读写整行的字符串,那么最好使用CStdioFile,用它来进行此类操作非常方便。因此我们便很自然想到:首先我们把文本文件的每行数据读到一个缓冲区,然后使用sscanf把它转化为字符格式。

那么具体该怎么做呢?比如在一个txt文件里每一行数据格式是这样的:

A1 A2 A3 A3 ......An

那么读取的主体代码是:

CStdioFile File;    // 定义一个CStdioFile类变量FileCString FileData; // 定义一个CString,作为一个缓冲区/*定义n个临时字符串变量,大小依据实际情况,这里暂设为10*/char  TempStr1[10],TempStr2[10]......TempStrN[10];File.ReadString(FileData); // 将一行数据读到缓冲区/*将该行数据的n个字符读到n个临时字符串变量*/sscanf(FileData,"%s %s %s %s ......%s",TempStr1,TempStr2......TempStrN);


     这种读法的一个好处是对文本格式要求不严,如下面的格式也可以
(前面可有未知个空格) A1 A2 (两个数据之间也可有未知个空格) A3 A3 ......An

三.编程步骤

下面我以一个单文档程序来具体说明我的做法。该程序的主要功能是读取文本文件的坐标数据,然后在客户区里用直线将这些坐标连起来,并显示。

 

1、  启动Visual C++6.0,生成一个单文档的工程,将该工程命名为ReadCoodinate

2、 添加一个“读取文本数据”的菜单项。

3、 给视图类添加两个public变量:

CArray<CPoint,CPoint> m_PointArray; // 用于记录坐标点数据int m_PointNum;   // 用于记录坐标点个数,在视图类构造函数中初始化为0。


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+
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值