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

📄 makejianpinindexdlg.h

📁 中文编码转换
💻 H
字号:
// MakeJianPinIndexDlg.h : header file
//

#if !defined(AFX_MAKEJIANPININDEXDLG_H__8B3842ED_EF29_407E_8C16_9698E51F49D5__INCLUDED_)
#define AFX_MAKEJIANPININDEXDLG_H__8B3842ED_EF29_407E_8C16_9698E51F49D5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <vector>
#include "Afxtempl.h"

struct ST_CityList
{
	int	iCityID;
	std::vector<int> vSubCityList;
};

struct ST_ProvList
{
	int	iProvID;
	CList<ST_CityList*, ST_CityList*> CityList;
};

struct ST_CityAll
{
	int	iCityID;
	char szName[32];
};

struct ST_NameIndex
{
	UINT nOffset;
	UINT nTotalLen;
	UINT nPIULen;
	UINT nRdULen;
	BYTE* pBuffer;
};

struct ST_ProvIndex
{
	int iProvID;
	int iOffset;
	USHORT usCityNum;
	char szName[32];	
};

struct ST_CityIndex
{
	int iCityID;
	int iOffset;
	USHORT usSubCityNum;
	char szName[32];	
};

// 默认字母一级分包数目为24
struct ST_SubCityIndex
{
	int iCityID;
	int iOffset;
	char szName[32];	
};

struct ST_CharIndex
{	
	int iOffset;
	USHORT usPackNum;
};

struct ST_PackIndex
{
	BYTE	byNo;			// 拼音首字母的序号
	BYTE	byFlag;			// POI:0, Rd:1
	int		iOffset;		// 数据绝对偏移
	DWORD	nTotalLen;		// 压缩后数据长度
	DWORD	nTotalULen;		// 压缩前数据长度
	DWORD	nJPULen;		// 简拼数据长度
};

struct ST_NameData
{
	BYTE	byCharCnt;		// 字符个数
	BYTE	byType;			// 小类
	BYTE	byLayerID;		// 图层号
	int		iMapID;			// 图幅
};
/////////////////////////////////////////////////////////////////////////////
//
// Macros
class CJPIndexStruct
{
public:
	enum
	{
		FileHeaderFlagLen = 0x9,
		CityNum = 0x4,
		CityIndexOldLen = 0xC,
		CityIndexNewLen = 0x14,
		CharacterIndexCount = 0x18 //字符,和汉字A-Z声母区
	};
};

#define CHARACTER_INDEX_COUNT 0x18  
#define CHARACTER_NEWINDEX_COUNT 0x1b 
#define BLOCK_SIZE	          0x8000
typedef unsigned long ulongf;

class CNameNode
{
public:
	// 构造与析构
	CNameNode();
	CNameNode(char *pszName, int nMapID, BYTE bLayer, BYTE bType);
	~CNameNode();
	// Get
	char* GetName() const;
	int   GetNameLen() const;
	int   GetMapID() const;
	BYTE  GetLayer() const;
	BYTE  GetType() const;
	CNameNode* GetNext() const;
	// Set
	void SetNext(CNameNode *pNext);
	// 统计索引长
	int IndexLen();
private:
	char* m_pszName;	//名称
	int	 m_nMapID;		//图幅ID
	BYTE m_bLayer;		//图层ID
	BYTE m_bType;		//小类ID
	CNameNode *m_pNext;
};

class CNameNodeChain
{
public:
	// 构造与析构
	CNameNodeChain();
	~CNameNodeChain();
	// Get
	CNameNode* GetFirst() const;
	int GetObjNum() const;
	int GetOffset() const;
	// Set
	void SetOffset(const int &nOffset);
	// Insert
	void AddTail(CNameNode *pInsNode);
	// 统计索引长
	int IndexLen() const;
private:
	CNameNode *m_pHead;
	CNameNode *m_pTail;
	int		  m_nObjNum;
	int       m_nOffset;
};

class CJPNode
{
public:
	// 构造与析构
	CJPNode();
	~CJPNode();
	// Get
	int   GetOffset() const;
	BYTE* GetJPCode() const;
	BYTE  GetJPCodeLen() const;
	CJPNode* GetNext() const;
	// Set
	void SetOffset(const int &nOffset);
	void SetJPCode(const BYTE *pbJPCode);
	void SetNext(const CJPNode *pNext);
	// Stat
	int IndexLen();
private:
	int     m_nOffset;		// 名称数据的偏移
	BYTE    *m_pbJPCode;	// 简拼码
	CJPNode *m_pNext;
};

class CJPNodeChain
{
public:
	// 构造与析构
	CJPNodeChain();
	~CJPNodeChain();
	// Get
	CJPNode* GetFirst() const;
	int GetObjNum() const;
	// Set
	// Insert
	void AddTail(CJPNode *pInsNode);
	// Stat
	int IndexLen() const;
	// Update
private:
	CJPNode *m_pHead;
	CJPNode *m_pTail;
	int     m_nObjNum;
};

/***********************************************************
详细的索引结构请参见相关文档。
************************************************************/
struct ST_Info
{
	CHAR	szName[256];
	LONG	lBreadthID;
	BYTE	byLayerID;

	ST_Info()
	{
		memset(szName, 0x0, 256);
		lBreadthID = 0;
		byLayerID = 0;
	}

	//////////////////
	// POI文本说明
	// 简称 || 图幅号 || 图层号 || 0 || 全称
	//////////////////
	BOOL ParsePITxt(CString strContent)
	{
		if(strContent.GetLength() == 0)
			return TRUE;

		int iPos = 0;

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		strContent = strContent.Mid(iPos + strlen("||"));

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		lBreadthID = atoi(strContent.Left(iPos));
		strContent = strContent.Mid(iPos + strlen("||"));

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		byLayerID = atoi(strContent.Left(iPos));
		strContent = strContent.Mid(iPos + strlen("||"));

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		strContent = strContent.Mid(iPos + strlen("||"));
		strContent.TrimLeft();
		strContent.TrimRight();

		strcpy(szName, strContent.GetBuffer(0));

		return TRUE;
	}

	//////////////////
	// Rd文本说明
	// 简称 || 图幅号 || 图层号 || 0
	//////////////////
	BOOL ParseRdTxt(CString strContent)
	{
		if(strContent.GetLength() == 0)
			return TRUE;

		int iPos = 0;

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		strcpy(szName, (strContent.Left(iPos)).GetBuffer(0));
		strContent = strContent.Mid(iPos + strlen("||"));

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		lBreadthID = atoi(strContent.Left(iPos));
		strContent = strContent.Mid(iPos + strlen("||"));

		if( (iPos = strContent.Find("||")) < 0)
			return FALSE;
		byLayerID = atoi(strContent.Left(iPos));

		return TRUE;
	}
};

class CCity
{
public:
	// 构造与析构
	CCity();
	~CCity();

	// Get
	int GetID() const;
	//
	int GetOffset() const;
	int GetCLen() const;
	int GetUCLen() const;
	int GetJPLen() const;
	ST_PackIndex GetPackIndex(const int i);
	BYTE* GetPackBuffer(const int i);
	int GetPOICnt();
	int GetRdCnt();

	int GetSrcPIJPULen() const;
	int GetSrcRdJPULen() const;
	// Set
	void SetID(const int &nID);
	void SetOffset(const int &nOffset);
	void SetCLen(const int &nCLen);
	void SetUCLen(const int &nUCLen);
	void SetJPLen(const int nJPLen);
	// Stat
	static int CharacterIndexLen();
	// Parse
	void ParseJPIndex(const BYTE *pbOldNamePack);
	void ParseTxt(CString strDir);
	void DeleteQuotation(char* pszName, int& nNameLen);

	void LoadJPToPack(CJPNodeChain *pJPNodeChain, LPBYTE &pbOrigin);
	void LoadNameIndexToPack(ST_NameIndex st_NameIndex, LPBYTE &pbOrigin);
	void LoadNameDataToPack(CNameNodeChain *pNameNodeChain, LPBYTE &pbOrigin);

	int Write(CFile& fileJP, CFile& fileData, int& iCharIdxPos, int& iPackIndexPos, int& iPackDataPos);
	
protected:
private:
	int  m_nID;
	int  m_nOffset;
	int  m_nCLen;  // 总数据压缩后的长度
	int  m_nUCLen;	
	int  m_nPIJPUCLen;
	int  m_nRdJPUCLen;
	int  m_nJPLen;	// 简拼数据压缩后的长度
	int  m_nPOICnt;
	int  m_nRdCnt;
	ST_PackIndex m_ST_PackIndex[CHARACTER_INDEX_COUNT];	// 分包索引
	BYTE* m_pbPack[CHARACTER_INDEX_COUNT];

	CJPNodeChain* m_pPIJPPool[CHARACTER_INDEX_COUNT];	// (1)POI 简拼索引节点集
	CJPNodeChain* m_pRdJPPool[CHARACTER_INDEX_COUNT];	// (2)Rd 简拼索引节点集
	CNameNodeChain* m_ppPINamePack[CHARACTER_INDEX_COUNT];	// (3)POI 名称索引包
	CNameNodeChain* m_ppRdNamePack[CHARACTER_INDEX_COUNT];	// (4)Rd 名称索引包
	CNameNodeChain* m_ppPINameNewPack[CHARACTER_NEWINDEX_COUNT][CHARACTER_NEWINDEX_COUNT];
	CNameNodeChain* m_ppRdNameNewPack[CHARACTER_NEWINDEX_COUNT][CHARACTER_NEWINDEX_COUNT];
};



//////////////////////////////////////////////////////////////////////////////////////////
//多音字无法处理;有些字会出错,比如"涮"
int  GetJianPinCode(LPCSTR pszSrc, int nSrcLen, LPSTR lpObject, int &nObjectLen, BOOL bUpperChar = TRUE);
int  GetPYIndex(const char chPY);
void MergeToFinalFile (CString strSDIFile);

/////////////////////////////////////////////////////////////////////////////
// CMakeJianPinIndexDlg dialog

class CMakeJianPinIndexDlg : public CDialog
{
// Construction
public:
	CMakeJianPinIndexDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CMakeJianPinIndexDlg)
	enum { IDD = IDD_MAKEJIANPININDEX_DIALOG };
	CString	m_strJianPinFile;
	CString	m_strJPName;
	CString	m_strCityAll;
	CString	m_strTxtDir;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CMakeJianPinIndexDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CMakeJianPinIndexDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	virtual void OnOK();
	afx_msg void OnBrowseNidFile();
	afx_msg void OnBrowseJianPinFile();
	afx_msg void OnBtnCheckJp();
	afx_msg void OnBUTTONCityAll();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

	BROWSEINFO m_bi;
	std::vector<ST_CityAll> m_vSTCityAll;
	std::vector<int> m_vCity;
	CList<ST_ProvList*, ST_ProvList*> m_ProvList;
	int m_iProvCnt;
	int m_iCityCnt;
	int m_iSubCityCnt;

private:
	void Stat();
	void ParseCityIDName();
	void ReadTxt();
	void ParseCity();
	void StatCity();
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAKEJIANPININDEXDLG_H__8B3842ED_EF29_407E_8C16_9698E51F49D5__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -