#!/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']
|