我們通常把數據存諸在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
三.小結
上面只是小小的示例,讀者朋友可以將文本數據傳化為其它形式的數據(如將字符型數據轉化為浮點型),進行更復雜的數據處理,其中原理是一樣的