?? mydbf.h
字號:
#ifndef __MY_DBF__H__
#define __MY_DBF__H__
/*
DBF 讀取類
只讀取dbf數據內容 (包含打刪除標記的記錄)
DBF 文件格式:
頭部
如下定義頭部
字段類型定義
記錄集(數據部分)
*/
#include <string>
#include <vector>
#include <fstream>
struct _HEADER
{
long RecordsNum; // 記錄條數
short HeaderSize; // 文件頭長度
short RecordSize; // 一條記錄長度
};
struct _FIELD
{
char Name[16];
int RecordOffsize;
short Len;
};
typedef std::vector<_FIELD> _FIELD_VEC;
// 每條記錄 用指針表示 指向 m_pFileData 申請的空間
typedef std::vector<void*> _RECORD_VEC;
// DBF 類函數
class CMyDBF
{
public:
CMyDBF();
virtual ~CMyDBF();
// 設置 dbf 文件路徑
void SetDBFFile(std::string &FilePath);
// 設置 內存池大小 及 增減值
// 數據讀取完成時 可用空間 小于 StepNum 申請 StepNum 空間
// 數據讀取完成之后 可用空間 大于 StepNum 釋放 到StepNum空間大小
void SetPoolParms(int InitNum, int StepNum);
// 讀取 dbf 頭部 字段參數
// 內存池 申請 足夠的空間
bool Init();
// 釋放內存池
void Uninit();
// 讀取記錄集數據
bool ReadRecordsets();
// 釋放記錄集數據
void ReleaseRecordsets();
// 獲取某條記錄某個字段的值
bool GetFieldValue(void* pRecord, char *pFieldName, char* pData);
//
static void GetDataChar(char* pData, std::string &strData);
static void GetDataInteger(char* pData, long &szData);
static void GetDataNumber(char* pData, double &szData);
// theTm 只存儲數據 不做 tm 格式處理
static void GetDataDate(char* pData, tm &theTm);
static void GetDataDatetime(char* pData, tm &theTm);
// int GetDaysOfYears(int Year);
// int GetDaysOfMonth(int Year, int Month);
// 記錄集空間 (已經使用的)
_RECORD_VEC m_szRecordVec;
private:
bool GetPoolSpaceItem(void **pSpaceItem);
// DBF 文件路徑
std::string m_strDBFFile;
_HEADER m_szHeader;
_FIELD_VEC m_szFieldsVec;
// 申請的空間
_RECORD_VEC m_szFreeVec;
int m_szPoolInitNum;
int m_szPoolStepNum;
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -