|
|
@ -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:
|
|
|
|