master
asamoukin 16 years ago
parent 7f62a015a2
commit 584dee22ad

@ -1851,7 +1851,7 @@ class profile(_file, _terms):
varStart = "#-" varStart = "#-"
varEnd = "-#" varEnd = "-#"
self._reVar = re.compile(("%s[a-zA-Z0-9_-]+%s")%(varStart,varEnd),re.M) self._reVar = re.compile(("%s[a-zA-Z0-9_-]+%s")%(varStart,varEnd),re.M)
self._reFunc = re.compile(("%s[a-zA-Z0-9_\-\+\(\)\,]+%s")\ self._reFunc = re.compile(("%s[a-zA-Z0-9_\-\+\(\)\, \*\/]+%s")\
%(varStart,varEnd),re.M) %(varStart,varEnd),re.M)
self._deltVarStart = len(varStart) self._deltVarStart = len(varStart)
self._deltVarEnd = len(varEnd) self._deltVarEnd = len(varEnd)
@ -1909,16 +1909,19 @@ class profile(_file, _terms):
resS = self._reVar.search(textProfileTmp) resS = self._reVar.search(textProfileTmp)
return textProfileTmp return textProfileTmp
def applyFuncProfile(self, textProfile, nameProfile): def applyFuncProfile(self, textProfile, nameProfile):
""" Применяет функции к тексту профиля """ Применяет функции к тексту профиля
""" """
def equalTerm(term, sNum, localVars): def equalTerm(term, sNum, sMD, localVars):
"""Локальная функция для вычисления выражения""" """Локальная функция для вычисления выражения"""
terms = sNum.findall(term) terms = sNum.findall(term)
if terms: if terms:
strNumers = [] strNumers = []
for n in terms: for n in terms:
strNum = n.strip() strNum = n.strip()
if "*" in strNum or "/" in strNum:
strNum = multAndDiv(strNum,sNum,sMD,localVars)
try: try:
num = int(strNum) num = int(strNum)
except: except:
@ -1942,16 +1945,33 @@ class profile(_file, _terms):
print _("error profile term %s, incorrect data")%str(term) print _("error profile term %s, incorrect data")%str(term)
exit(1) exit(1)
def multAndDiv(term,sNum,sMD,localVars):
"""локальная функция для умножения и деления"""
termTmp = term
varsLocal = sMD.findall(term)
for var in varsLocal:
flagVarTxt = True
try:
int(var)
except:
flagVarTxt = False
if flagVarTxt:
continue
varReplace = str(equalTerm(var,sNum,sMD,localVars))
termTmp = termTmp.replace(var,varReplace)
ret = eval(termTmp)
return ret
def funcSum(funTxt,resS,localVars,textProfileTmp): def funcSum(funTxt,resS,localVars,textProfileTmp):
"""локальная функция вычисляет первую функцию sum() в профиле""" """локальная функция вычисляет первую функцию sum() в профиле"""
terms = funTxt[4:-1].split(",") terms = funTxt[4:-1].replace(" ","").split(",")
# Название локальной переменной # Название локальной переменной
nameLocVar = terms[0].strip() nameLocVar = terms[0]
if not localVars.has_key(nameLocVar): if not localVars.has_key(nameLocVar):
localVars[nameLocVar] = 0 localVars[nameLocVar] = 0
if len(terms) == 2: if len(terms) == 2:
if terms[1].strip(): if terms[1].strip():
localVars[nameLocVar] = equalTerm(terms[1],sNum, localVars[nameLocVar] = equalTerm(terms[1],sNum,sMD,
localVars) localVars)
replace = str(localVars[nameLocVar]) replace = str(localVars[nameLocVar])
else: else:
@ -1960,14 +1980,14 @@ class profile(_file, _terms):
textProfileTmp[resS.end():] textProfileTmp[resS.end():]
elif len(terms) == 3: elif len(terms) == 3:
if terms[1].strip(): if terms[1].strip():
replaceInt = equalTerm(terms[1],sNum,localVars) replaceInt = equalTerm(terms[1],sNum,sMD,localVars)
localVars[nameLocVar] = replaceInt localVars[nameLocVar] = replaceInt
replace = str(replaceInt) replace = str(replaceInt)
else: else:
replaceInt = localVars[nameLocVar] replaceInt = localVars[nameLocVar]
replace = "" replace = ""
localVars[nameLocVar] = equalTerm(terms[2], localVars[nameLocVar] = equalTerm(terms[2],
sNum, localVars) sNum,sMD,localVars)
textProfileTmp = textProfileTmp[:resS.start()] + replace +\ textProfileTmp = textProfileTmp[:resS.start()] + replace +\
textProfileTmp[resS.end():] textProfileTmp[resS.end():]
else: else:
@ -1978,7 +1998,10 @@ class profile(_file, _terms):
# Локальные переменные # Локальные переменные
localVars = {} localVars = {}
# Регулярное выражние для сложения
sNum = re.compile("\-[^\-\+]+|[^\-\+]+") sNum = re.compile("\-[^\-\+]+|[^\-\+]+")
# Регулярное выражение для умножениея и деления
sMD = re.compile("[^\-\+\*\/]+")
resS = self._reFunc.search(textProfile) resS = self._reFunc.search(textProfile)
textProfileTmp = textProfile textProfileTmp = textProfile
while resS: while resS:

Loading…
Cancel
Save