程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC++應用程序中讀取文本數據

在VC++應用程序中讀取文本數據

編輯:vc教程

我們通常把數據存諸在txt文件上,但是我們通常要把這些數據取出來並進行處理。下面我將介紹一種在VC++應用程序中讀取文本數據的方法。

一.前言

因為經常要處理地質方面的數據。但是很多數據它不是直接存貯在數據庫文件(如Access文件等),而是存貯在txt文件。經常有同學問我怎麼通過編程讀取實現文本文件中的數據。其實存貯在txt文件也有它的好處,不像讀取Access文件那樣要注冊數據源,設置比較麻煩,編寫讀取程序也比較復雜。

二.程序原理

首先我們知道假如要進行的文件操作只是簡單的讀寫整行的字符串,那麼最好使用CStdioFile,用它來進行此類操作非常方便。因此我們便很自然想到:首先我們把文本文件的每行數據讀到一個緩沖區,然後使用sscanf把它轉化為字符格式。

那麼具體該怎麼做呢?比如在一個txt文件裡每一行數據格式是這樣的:

A1 A2 A3 A3 ......An

那麼讀取的主體代碼是:

CStdioFile File;    // 定義一個CStdioFile類變量File
CString 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);//讀取第一行數據,第一行數據為坐標點數據
   /*定義兩個臨時字符串,並初始化為''*/
   char TempStr1[10];
   char TempStr2[10];
   memset(TempStr1,'',10);
   memset(TempStr2,'',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
 
三.小結

上面只是小小的示例,讀者朋友可以將文本數據傳化為其它形式的數據(如將字符型數據轉化為浮點型),進行更復雜的數據處理,其中原理是一樣的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved