#include "StdAfx.h" #include ".\stringtableparser.h" #include #include "util/util.h" CStringTableParser::CStringTableParser(void) { m_iter = m_mapStringTable.end(); } CStringTableParser::~CStringTableParser(void) { m_mapStringTable.clear(); } bool CStringTableParser::Reload() { return Init((TCHAR*)m_sTablePath.c_str()); } bool CStringTableParser::Init(TCHAR* pszFullPath) { //file open m_sTablePath = pszFullPath; FILE* fp = fopen(pszFullPath, "r"); if(fp) { TCHAR szBuff[1024]; ZeroMemory(szBuff, sizeof(TCHAR)*1024); while(_fgetts(szBuff, 1024, fp) != NULL) { trimLeft(szBuff); trimRight(szBuff); if( (strncmp(szBuff, "//", 2) == 0) ) { continue; } //½ÃÀÛ°ú ³¡ÀÌ¸é ³Ñ¾î°£´Ù. if( (strncmp(szBuff, "start", 5) == 0) ) { _LOG("STRIGNTABLE - START(%s)",pszFullPath); continue; } if(strncmp(szBuff, "end", 3) == 0) { _LOG("STRIGNTABLE - END"); break; } std::string str = szBuff; int nPos1 = str.find("\t"); if(std::string::npos == nPos1) { _LOG("StringTable parse Error.(%s)", str.c_str()); continue; } std::string code = str.substr(0, nPos1); int nPos2 = str.find("\n"); std::string desc = str.substr(nPos1+1, nPos2-nPos1-1); TCHAR szTmp[1024] = {0,}; strcpy(szTmp, desc.c_str()); trimLeft(szTmp); trimRight(szTmp); desc = szTmp; int iCode = atoi(code.c_str()); m_mapStringTable[iCode] = desc; m_mapIdxTable[desc] = iCode; // _LOG("[%d] %s", iCode, desc.c_str()); /* TCHAR szSeps[] = "\t"; //ÅÇÀ» ±âÁØÀ¸·Î ÄÚµå¿Í ½ºÆ®¸µÀ» ºÐ¸®Çؼ­ ÆÄ½ÌÇÑ´Ù. TCHAR* pszCode = _tcstok(szBuff, szSeps); TCHAR* pszString = _tcstok(NULL, szSeps); //µÑ´Ù ³ÎÀÌ ¾Æ´Ï¸é.... ¸Ê¿¡ Áý¾î³Ö´Â´Ù. if(pszCode && pszString) { pszString[_tcslen(pszString)-1] = '\0'; int iCode = _ttoi(pszCode); if(203009 == iCode) { _LOG(""); } m_mapStringTable[iCode] = pszString; m_mapIdxTable[pszString] = iCode; _LOG("[%d] %s", iCode, pszString); } else { //½ÇÆÐ´Ù. m_mapStringTable.clear(); m_mapIdxTable.clear(); fclose(fp); return false; } */ } fclose(fp); return true; } return false; } TCHAR* CStringTableParser::GetStringByCode(int iCode) { std::map::iterator iter; //ã¾Ò´Ù¸é.. if ((iter = m_mapStringTable.find(iCode)) != m_mapStringTable.end()) { return (TCHAR*)(*iter).second.c_str(); } return NULL; } int CStringTableParser::GetCodeByString(std::string str) { std::map::iterator iter; //ã¾Ò´Ù¸é.. if ((iter = m_mapIdxTable.find(str)) != m_mapIdxTable.end()) { return (int)(*iter).second; } return -1; } void CStringTableParser::SetFirst() { m_iter = m_mapStringTable.begin(); } char* CStringTableParser::GetNext() { char* psz = NULL; if(m_iter != m_mapStringTable.end()) { psz = (char*)m_iter->second.c_str(); m_iter++; return psz; } else return psz; }