master
asamoukin 16 years ago
parent 7069481143
commit dca038eeea

@ -1850,6 +1850,8 @@ class profile(_file, _terms):
varStart = "#-"
varEnd = "-#"
self._reVar = re.compile(("%s[a-zA-Z0-9_-]+%s")%(varStart,varEnd),re.M)
self._reFunc = re.compile(("%s[a-zA-Z0-9_\-\+\(\)\,]+%s")\
%(varStart,varEnd),re.M)
self._deltVarStart = len(varStart)
self._deltVarEnd = len(varEnd)
# Условия
@ -1902,12 +1904,82 @@ class profile(_file, _terms):
resS = self._reVar.search(textProfileTmp)
return textProfileTmp
#def applyFuncProfile(self, textProfile, nameProfile):
#""" Применяет функции к тексту профиля
#"""
#def profSum(varName,insertRes, varValue):
#"""Cуммирует и"""
def applyFuncProfile(self, textProfile):
""" Применяет функции к тексту профиля
"""
def equalTerm(term, sNum, localVars):
"""Локальная функция для вычисления выражения"""
terms = sNum.findall(term)
if terms:
strNumers = []
for n in terms:
strNum = n.strip()
try:
num = int(strNum)
except:
if localVars.has_key(strNum):
num = localVars[strNum]
elif self.objVar.exists(strNum):
try:
num = int(self.objVar.Get(strNum))
except:
print _("error var %s not int")%str(strNum)
exit(1)
else:
print _("error local var %s not defined")\
%str(strNum)
exit(1)
strNumers.append(num)
return sum(strNumers)
print _("error profile term %s, incorrect data")%str(term)
exit(1)
def funcSum(resS,localVars,textProfileTmp):
"""локальная функция вычисляет первую функцию sum() в профиле"""
terms = varName[4:-1].split(",")
# Название локальной переменной
nameLocVar = terms[0].strip()
if not localVars.has_key(nameLocVar):
localVars[nameLocVar] = 0
if len(terms) == 2:
if terms[1].strip():
localVars[nameLocVar] = equalTerm(terms[1],sNum,
localVars)
replace = str(localVars[nameLocVar])
else:
replace = ""
textProfileTmp = textProfileTmp[:resS.start()] + replace +\
textProfileTmp[resS.end():]
elif len(terms) == 3:
if terms[1].strip():
replaceInt = equalTerm(terms[1],sNum,localVars)
replace = str(replaceInt)
else:
replaceInt = localVars[nameLocVar]
replace = ""
localVars[nameLocVar] = replaceInt + equalTerm(terms[2],
sNum, localVars)
textProfileTmp = textProfileTmp[:resS.start()] + replace +\
textProfileTmp[resS.end():]
else:
print _("error profile term %s")%str(varName)
exit(1)
return textProfileTmp
# Локальные переменные
localVars = {}
sNum = re.compile("\-[^\-\+]+|[^\-\+]+")
resS = self._reFunc.search(textProfile)
textProfileTmp = textProfile
while resS:
mark = textProfileTmp[resS.start():resS.end()]
varName = mark[self._deltVarStart:-self._deltVarEnd]
if varName[:4] == "sum(":
textProfileTmp = funcSum(resS, localVars, textProfileTmp)
resS = self._reFunc.search(textProfileTmp)
else:
resS = False
return textProfileTmp
def applyTermsProfile(self, textProfile, nameProfile):
""" Применяет условия, к условным блокам текста
@ -2197,7 +2269,10 @@ class profile(_file, _terms):
self.newProfile = self.applyTermsProfile(self.newProfile,
newFile)
#print "|%s|" %(self.newProfile)
# Заменяем переменные на их значения
self.newProfile = self.applyVarsProfile(self.newProfile)
# Вычисляем функции
self.newProfile = self.applyFuncProfile(self.newProfile)
objHeadNew = self.__getApplyHeadProfile(newFile, oldFile)
if not objHeadNew:

Loading…
Cancel
Save