📄 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 + -