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

📄 solarfilereader.h

📁 奇迹世界公用文件源代码,研究网络游戏的朋友可以研究下
💻 H
字号:
#ifndef __SOLAR_FILE_READER_H__
#define __SOLAR_FILE_READER_H__

//=============================================================================================================================
/// 阿辆 胶农赋飘 颇老(txt)佬扁 困茄 parser : SolarFileReader class
/**
	@author	Kim Min Wook < taiyo@webzen.co.kr >
	@since	2005. 1. 31
	@remarks
		- 扁粮狼 scriptRead狼 扁瓷 俺急魄
	@note
		- open mode : SEPERATOR_WHITESPACE
		  备盒磊绰 white space父 捞促.
		- open mode : SEPERATOR_QUOTATIONMARKFORSTR
		  备盒磊绰 white space捞绊 巩磊凯篮 '"'蝶咳钎肺 钎矫茄促.
		- 货肺款 窃荐 力累 : 蜡历 祈狼甫 困秦辑 : 2005.3.29
			char *				GetNextString();
			float				GetNextNumber();	
	@todo
		- 决拜茄 巩过 坷幅 眉农, 粱歹 沥犬茄 鸥涝眉农啊 鞘夸 ex) 0.0.4(X), 0.f04(X)
		- white space => 1003  0巩磊老鳖 34 5 7 : 老锭 '0巩磊老鳖'阑 箭磊肺 焊绰 滚弊!
	@history
		- 2005.2.24 : EOF狼 滚弊 荐沥
		- 2005.4.12 : number狼 datatype float -> double
		- string, number 备盒绝捞 肺流俊辑 舅酒辑 备盒秦辑 荤侩窍绰 葛靛 眠啊
		- 2005.5.11 : case '+': 亲格 眠啊
		- 2005.8.22 : Reset()窃荐 眠啊, 促矫 霉 困摹何磐 佬扁 困秦
		- 2005.9.23 : CPackFile阑 捞侩秦 File阑 阂矾坷扁 困秦 OpenFileFromPack() 窃荐 眠啊
		- 2005.9.26 : 坷流 俺青巩磊父 盒府磊肺 牢侥窍绰 SEPERATOR_ONLY_NEWLINE 鸥涝苞 _getNextTokenType_newline() 窃荐 眠啊
		- 2005.9.27 : 后傍埃阑 盒府磊肺 荤侩窍绊 葛电 配奴阑 巩磊凯肺父 牢侥窍绰 SEPERATOR_WHITESPACE_ONLY_STRING 鸥涝苞 _getNextTokenType_whitespace_onlystring() 窃荐 眠啊
	@usage
		- 规过1
		SolarFileReader sr;
		sr.OpenFile( pszCalcCharFileName, SEPERATOR_QUOTATIONMARKFORSTR );

		while( TOKEN_END != sr.GetNextTokenType() )
		{		
			int iGetNumber = sr.GetTokenNumber();
			sr.GetNextTokenType( TOKEN_STRING );
			strncpy( pszCharName, sr.GetTokenString(), MAX_CHARNAME_LENGTH );
		}

		sr.CloseFile();

		- 规过2
		SolarFileReader sr;
		sr.OpenFile( pszCalcCharFileName, SEPERATOR_QUOTATIONMARKFORSTR );

		while( !sr.IsEOF() )
		{
			int iGetNumber = sr.GetNextNumber();
			strncpy( pszCharName, sr.GetNextString(), MAX_CHARNAME_LENGTH );
		}

		sr.CloseFile();

*/
//=============================================================================================================================

#pragma once


enum eTOKEN_TYPE
{
	TOKEN_ANYTYPE			= -1,
	TOKEN_ERROR				= 0,
	TOKEN_END,
	TOKEN_NUMBER,
	TOKEN_STRING,
	TOKEN_EXTRA,

	TOKEN_SLASH				= '/',
	TOKEN_ASTERISK			= '*',

	// white-space
	TOKEN_SPACE				= ' ',
	TOKEN_NEWLINE			= '\n',
	TOKEN_CARRIAGERETURN	= '\r', 
	TOKEN_TAB				= '\t',
};

enum eSEPERATOR_MODE
{
	SEPERATOR_ERROR						= 0x00,
	SEPERATOR_WHITESPACE				= 0x01,
	SEPERATOR_QUOTATIONMARKFORSTR		= 0x02,
	SEPERATOR_ONLY_NEWLINE				= 0x03,	// 箭磊, 巩磊, 傍归俊 包拌绝捞 公炼扒 new line 父阑 盒府磊肺 牢侥
	SEPERATOR_WHITESPACE_ONLY_STRING	= 0x04  // 傍归栏肺 盒府登绰 葛电 配奴篮 公炼扒 巩磊烙
};

namespace util 
{

class SolarFileReader
{
	enum 
	{
		MAX_TOKEN_BUFFER_SIZE			= 1024,
	};
public:
	SolarFileReader();
	~SolarFileReader();

	BOOL				OpenFile( char * pszFileName, eSEPERATOR_MODE mode = SEPERATOR_WHITESPACE );
	BOOL				OpenFileFromPack( char * pszPackFileName, char * pszFileName, eSEPERATOR_MODE mode = SEPERATOR_WHITESPACE );
	BOOL				OpenBuffer( BYTE * pMemoryBuffer, DWORD dwBufferSize, eSEPERATOR_MODE mode = SEPERATOR_WHITESPACE );
	VOID				CloseBuffer();
	VOID				CloseFile();

	eTOKEN_TYPE			GetNextTokenType( eTOKEN_TYPE desireTokenType = TOKEN_ANYTYPE );

	char *				GetTokenString() { return m_pszTokenString;	}
	double				GetTokenNumber() { return m_dTokenNumber;	}

	BOOL				IsEOF();
	char *				GetNextString( eTOKEN_TYPE desireTokenType = TOKEN_STRING );
	double				GetNextNumber( eTOKEN_TYPE desireTokenType = TOKEN_NUMBER );
	VOID				Reset();
private:
	VOID				_clear();
	char				_getchar( DWORD * pPos = NULL );
	char				_getcurchar( DWORD * pPos = NULL );
	VOID				_rewind( int i , DWORD * pPos = NULL );
	int					_isspace( char c );
	int					_isnewline( char c );
	BOOL				_isnumber( char c );

	eTOKEN_TYPE			_getNextTokenType_whitespace( eTOKEN_TYPE desireTokenType );
	eTOKEN_TYPE			_getNextTokenType_quotationForStr( eTOKEN_TYPE desireTokenType );
	eTOKEN_TYPE			_getNextTokenType_newline( eTOKEN_TYPE desireTokenType );
	eTOKEN_TYPE			_getNextTokenType_whitespace_onlystring( eTOKEN_TYPE desireTokenType );

	double				m_dTokenNumber;
	char				m_pszTokenString[MAX_TOKEN_BUFFER_SIZE];
	DWORD				m_dwBufferPos;
	DWORD				m_dwBufferSize;
	char *				m_pszBuffer;
	eSEPERATOR_MODE		m_Mode;
};


} /// namespace util


//=======================================================================================================

class BaseParser
{
public :

	BaseParser();
	virtual ~BaseParser();

			void	SetPackFileName( char * pszPackFileName );

protected :

	BOOL	OpenFile( util::SolarFileReader & sr, char * pszFileName,  eSEPERATOR_MODE mode );

private :

	char	m_pszPackFileName[MAX_PATH];
};

#endif // __SOLAR_FILE_READER_H__

⌨️ 快捷键说明

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