⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mydbf.h

📁 DBF文件解析读取 普通字段类型解析 其他
💻 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 + -