#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package PythonData # # @todo:PY¶Á±íÆ÷ # @author hxp # @date 2016-01-26 # @version 1.0 # # ÏêϸÃèÊö: PY¶Á±íÆ÷ # #--------------------------------------------------------------------- """Version = 2016-01-26 15:00""" #--------------------------------------------------------------------- #µ¼Èë import GameWorld import ChConfig import copy import os #--------------------------------------------------------------------- #È«¾Ö±äÁ¿ FIELD_LINE = 1 #±ê³ö×Ö¶ÎÃûµÄÐкŠEFFECT_START_LINE = 3 #ÓÐЧÄÚÈÝÆðʼÐкÅugOutput(str(info)) ## ¶Á±íÀà # # ¶ÁÈ¡±íÊý¾Ý£¬Ö§³Ö¸÷ÖÖ½Ó¿Ú²éѯ±íÊý¾Ý£¬½Ó¿ÚÔÚÄ£¿éĩβÓÐ×¢ÊÍ class FileData: ## ¶Áȡָ¶¨µÄ±íµÄÄÚÈݲ¢±£´æÆðÀ´ # @param ²ÎÊý # @return ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£º def __init__(self, filePath, filedLine=FIELD_LINE, StartLine=EFFECT_START_LINE): self.fieldList = [] #×Ö¶ÎÃûÁбí self.lineCount = 0 #×ÜÓÐЧÐÐÊý self.contentList = [] #ÄÚÈÝÁбí #¶¯Ì¬ÉèÖÃÆðʼÐкÍ×Ö¶ÎÐÐ self.fieldLine = filedLine self.effectStartLine = StartLine self.filePath = filePath self.__CreateContent(self.__OpenFileData(filePath)) return ## ¶ÁÈ¡Êý¾Ý # @param filePath: Îļþ # @return ÎļþÄÚÈÝ def __OpenFileData(self, filePath): curPath = ChConfig.GetAppPath() + "\\" + filePath if not os.path.isfile(curPath): GameWorld.ErrLog('δ·¢ÏÖÄ¿±êÎļþ = %s,%s' % (filePath , curPath)) raise Exception ('δ·¢ÏÖÄ¿±êÎļþ = %s,%s' % (filePath , curPath)) # ÒÔ¶þ½øÖƶÁÈ¡ fileObj = open(curPath, 'rb') strMsg = fileObj.read() fileObj.close() return strMsg ## Éú³ÉÄÚÈÝ×Öµä # @param ²ÎÊý # @return ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£º¶ÁÎı¾ÄÚÈÝת»¯³ÉÐÐ×ÖµäµÄÁбí def __CreateContent(self, content): infoList = content.split('\r\n') #²ð·ÖÐÐ for i in range(len(infoList)): info = infoList[i] if not info: continue rowList = info.split('\t') #ÐÐÁÐ±í£¬Ã¿Ò»ÐÐ #×Ö¶ÎÃûËùÔÚÐÐ if i == self.fieldLine: self.fieldList = rowList[:] #×Ö¶ÎÁбí #ÓÐЧÄÚÈÝÐÐ if i >= self.effectStartLine: #ÐÐÄÚÈÝÁÐÊýСÓÚ×Ö¶ÎÃû¸öÊý if len(rowList) != len(self.fieldList): GameWorld.ErrLog("%s ÄÚÈÝÊýÓë×Ö¶ÎÊý²»ÏàµÈ, line=%s" % (self.filePath, i + 1)) raise Exception ("%s ÄÚÈÝÊýÓë×Ö¶ÎÊý²»ÏàµÈ, line=%s" % (self.filePath, i + 1)) rowDic = {} #ÐÐ×Öµä for j in range(len(self.fieldList)): if rowList[j] == '-': rowDic[self.fieldList[j]] = '' else: rowDic[self.fieldList[j]] = rowList[j] self.contentList.append(rowDic) #Ìí¼ÓÄÚÈÝÁбí self.lineCount = len(self.contentList) GameWorld.Log("¼ÓÔØPY±íÊý¾Ý: %s, ÄÚÈÝÌõÊý=%s" % (self.filePath, self.lineCount)) return #================================================================================ ## ͨ¹ý×Öµä²éѯ # @param ²ÎÊý # @return ·ûºÏÌõ¼þµÄÐÐÁбí # @remarks º¯ÊýÏêϸ˵Ã÷£ºÍ¨¹ý×Öµä²éѯ¿ÉÒÔ°üº¬¶à¸ö²éѯÌõ¼þ def GetRecordByDic(self, searchDic, getRecordCnt=0): resultList = [] #½á¹ûÁбí #´«ÈëµÄ²ÎÊý²»ÊÇ×Öµä if type(searchDic) != type({}): return resultList count = self.GetRecordCount() #±éÀúÄÚÈÝÁбí for i in range(count): rowDic = self.contentList[i] #ÐÐ×Öµä isCorrectResult = True for key in searchDic: #ÐÐ×ÖµäÀïÎÞ²éѯ×ÖµäÖеļü if key not in rowDic: return [] #²éѯ×ֶεÄÖµ²»·û if searchDic[key] != rowDic[key]: isCorrectResult = False break #±¾ÐзûºÏ²éѯÌõ¼þ if isCorrectResult: resultList.append(rowDic) if getRecordCnt > 0 and len(resultList) >= getRecordCnt: break # ·µ»Ø½á¹û½øÐÐÉ±´£¬·ÀÖ¹»ù±íÊý¾Ý±»ÐÞ¸Ä return copy.deepcopy(resultList) ## ͨ¹ýij¸ö×ֶβéѯ # @param ²ÎÊý # @return ·ûºÏÌõ¼þµÄÐÐÁбí # @remarks º¯ÊýÏêϸ˵Ã÷£ºÍ¨¹ýij¸ö×ֶεÄֵΪ¶àÉÙ½øÐеIJéѯ def GetRecord(self, fieldName, value, getRecordCnt=0): return self.GetRecordByDic({fieldName:str(value)}, getRecordCnt) ## ·µ»ØÓÐЧÄÚÈÝÌõÊý # @param ²ÎÊý # @return ÌõÊý # @remarks º¯ÊýÏêϸ˵Ã÷£º def GetRecordCount(self): return self.lineCount ## ͨ¹ýË÷Òý·µ»ØÄÚÈÝ # @param ²ÎÊý # @return ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£º def GetRecordByIndex(self, index): # ·µ»Ø½á¹û½øÐÐÉ±´£¬·ÀÖ¹»ù±íÊý¾Ý±»ÐÞ¸Ä return copy.deepcopy(self.contentList[index]) #----------------------------½Ó¿ÚʹÓÃ˵Ã÷------------------------------- #½Ó¿Ú£ºGetRecordByDic£¨searchDic£© ͨ¹ýÒ»¸ö×Öµä²éѯÊý¾Ý # ²ÎÊý£ºÒ»¸ö²éѯ×Öµä È磺{'FrmName':'frmIndividualRankEx','FunctionID':'2'} ×Öµä×Öµä¿ÉÈÎÒâÌí¼Ó²éѯ×Ö¶Î 'TwoValue':'0' # ·µ»ØÖµ£º·ûºÏÌõ¼þµÄÁÐ±í£¬ÁбíÀïÊÇ·ûºÏÌõ¼þµÄÿÐÐ×Öµä # ʹÓ㺠GameRank = FileData() # list = GameRank.GetRecordByDic({'FrmName':'frmIndividualRankEx','FunctionID':'2'}) # dic = list[0] # id = dic['FunctionID'] #½Ó¿Ú£ºGetRecord£¨fieldName,value£© ͨ¹ý×Ö¶ÎÃûºÍ¸Ã×ֶεÄÖµ²éѯ # ²ÎÊý£º×Ö¶ÎÃû£¬×Ö¶ÎÖµ È磺'FrmName','frmIndividualRankEx' # ·µ»ØÖµ£º·ûºÏÌõ¼þµÄÁÐ±í£¬ÁбíÀïÊÇ·ûºÏÌõ¼þµÄÿÐÐ×Öµä # ʹÓ㺠obj.GetRecord('FrmName','frmIndividualRankEx')[0]['Remark'] # #½Ó¿Ú£ºGetRecordCount£¨£© È¡µÃÓÐЧÄÚÈÝÌõÊý # ·µ»ØÖµ£ºint ÄÚÈÝÌõÊý # #½Ó¿Ú£ºGetRecordByIndex£¨index£© ͨ¹ýË÷Òý·µ»ØÄÚÈÝ # ²ÎÊý£ºint Ë÷Òý # ·µ»ØÖµ£º¸ÃË÷ÒýÐеÄ×Öµä # ʹÓ㺠obj.GetRecordByIndex(0)['Remark']