Problemas de recursividad
Publicado: 15 Feb 2016, 18:43
Cuando hago una función recursiva a partir de la segunda llamada no funciona: Return SetError. Al menos no devuelve la función SetError el valor del argumento pasado en el tercer parámetro. Al parecer el problema está en la función Return.
;#Include <FF.au3>
#Region Include
#include-once
#include <StringConstants.au3>
#EndRegion
$resultAna = AnalizarVersionProgram("6.5.310","6.5.10")
Exit MsgBox(64,"Información",$resultAna)
Func AnalizarVersionProgram($version, $versionText)
If Not $versionText Then Return SetError(1,0,"No se ha especificado ninguna versión para la comparación.")
$resultAnaExp = StringRegExp($versionText,"^\.|[^0-9\.]|.\D\.|\.$")
If @error Then
Return SetError(2,0,"Información sobre el error: " & @extended)
EndIf
If $resultAnaExp Then Return SetError(3,0,"La versión especificada no cumple con la estrutura consebida para la comparación.")
$posPtoVersion = StringInStr($version,".")
$posPtoVersionText = StringInStr($versionText,".")
$result = ($posPtoVersion?Int(StringLeft($version,$posPtoVersion-1)):Int($version)) _
- ($posPtoVersionText?Int(StringLeft($versionText,$posPtoVersionText-1)):Int($versionText))
Select
Case $result > 0
Return SetError(0,2,"<")
Case $result < 0
Return SetError(0,2,">")
Case $result = 0
If $posPtoVersionText And Not $posPtoVersion Then Return SetError(0,3,">=")
If $posPtoVersion And Not $posPtoVersionText Then Return SetError(0,4,"<")
If Not $posPtoVersion And Not $posPtoVersionText Then Return SetError(0,5,"=")
AnalizarVersionProgram(StringMid($version,$posPtoVersion + 1),StringMid($versionText,$posPtoVersionText + 1))
EndSelect
EndFunc
;#Include <FF.au3>
#Region Include
#include-once
#include <StringConstants.au3>
#EndRegion
$resultAna = AnalizarVersionProgram("6.5.310","6.5.10")
Exit MsgBox(64,"Información",$resultAna)
Func AnalizarVersionProgram($version, $versionText)
If Not $versionText Then Return SetError(1,0,"No se ha especificado ninguna versión para la comparación.")
$resultAnaExp = StringRegExp($versionText,"^\.|[^0-9\.]|.\D\.|\.$")
If @error Then
Return SetError(2,0,"Información sobre el error: " & @extended)
EndIf
If $resultAnaExp Then Return SetError(3,0,"La versión especificada no cumple con la estrutura consebida para la comparación.")
$posPtoVersion = StringInStr($version,".")
$posPtoVersionText = StringInStr($versionText,".")
$result = ($posPtoVersion?Int(StringLeft($version,$posPtoVersion-1)):Int($version)) _
- ($posPtoVersionText?Int(StringLeft($versionText,$posPtoVersionText-1)):Int($versionText))
Select
Case $result > 0
Return SetError(0,2,"<")
Case $result < 0
Return SetError(0,2,">")
Case $result = 0
If $posPtoVersionText And Not $posPtoVersion Then Return SetError(0,3,">=")
If $posPtoVersion And Not $posPtoVersionText Then Return SetError(0,4,"<")
If Not $posPtoVersion And Not $posPtoVersionText Then Return SetError(0,5,"=")
AnalizarVersionProgram(StringMid($version,$posPtoVersion + 1),StringMid($versionText,$posPtoVersionText + 1))
EndSelect
EndFunc