Programación General > Visual Basic 6.0 e inferiores
Error "procedimiento Largo" Vb 6.0
gabrielgc2002:
Bueno lo que pasa es que el código es demasiado largo, tienes razón en que estoy comparando muchos cadenas de caracteres, es por eso que esta muy largo creo que usando vectores se puede minimizar el código pero pues ya esta hecho y presiento que todo esta bien nada mas que me sale el error del procedimiento largo, bueno lo que quiero saber nada mas es como se definen los subprocedimientos Para dividir el código, si tiene un ejemplo :) :hola:
Angel38:
Estoy de acuerdo con fap, debes hacer modulos para simplificar el programa, ya que estos actuan globalmente en el desarrollo de tu software.
Y man, en serio si tienes 16.000 es que estas duplicando mucho codigo innecesariamente.
gabrielgc2002:
Bueno pues ya minimice el código y funciona a la perfección creo que nada mas era analizar un poco mas el algoritmo, pero como yo quería acabarlo lo mas rápido posible no puse atención en el código y lo hice a lo tonto es por eso que me salieron tantas líneas, pero pues ya solucione el problema claro gracias a ustedes se los agradezco mucho. Saludos :D :lol: :hola:
Nebire:
Habrás solucionado tu problema pero al final nadie te ha explicado otra que has pedido crear subprocedimientos... ya te lo explico yo...
Sea que tienes un código de 40.000 líneas o las que sean ejemplo:
--- Código: Text --- public sub elProcedimiento() codigo linea 1 codigo linea 2 . . . codigo linea 39999 codigo linea 40000 end sub
pués se trata de añadir un módulo (menú proyecto añadir módulo) o más...
y hacer algo como esto:
--- Código: Text --- public sub elProcedimiento() 'esto sería la función inicial call codigo1_10000 call codigo10001_20000 call codigo20001_30000 call codigo30001_40000 end sub ' este otro código iría en el módulo añadido public sub codigo1_10000 codigo linea 1 codigo linea 2 . . . codigo linea 9999 codigo linea 10000 end sub public sub codigo10001_20000 codigo linea 10001 codigo linea 10002 . . . codigo linea 19999 codigo linea 20000 end sub public sub codigo20001_30000 .... end sub public sub codigo30001_40000 .... ídem end sub
Como ves hemos dividido el código en 4 rutinas con nombre sin significado alguno, a fin de que te quede más claro...
Lo lógico no es partir el código arbitrariamente por cualquier línea, sino hacerlo por 'tareas'... supongamos que tu código varias veces toma una cadena, busca algo en ella y si lo encuentra lo remplaza por otra, pués esa funcionalidad es una tarea específica que puede ser despejada a un módulo como una función, que por ejemplo podría llamarse remplazar_Cadena ahora revisando todo tu código cada vez que hagas esa dentro de ella deberías sustituirlo por algo como lo siguiente:
--- Código: Text --- call remplazar_Cadena(cadenaOriginal, CadenaABuscar, ramplazo) Naturalmente antes habría que haber trasladado el código que hace esa tarea al módulo que sería algo como esto:
--- Código: Text --- public sub remplazar_Cadena(byref cadenaOrigen as string, buscar as string, remplazarCon as string) código que busca la cadena y lo remplaza... end sub
Cuando trabajas en un módulo se debe tener en cuenta el ámbito de las variables, esto es el 'alcance'. todas las variables de una función son reconocidas dentro de la función, pero una variable que es 'local' a una función no es accesible desde otra función, cuando se necesita disponer de variables accesibles desde diferentes funciones, hay que declaralas públicas en un módulo algo así como
--- Código: Text --- public estaVariable as integer public otraVariable as string public unaMatriz() as byte
Estas variables así declaradas en un módulo estarán disponibles en el formulario y por tanto podrás usarlas en todas las funciones..
Cuando sales de una función, todas las variables declaradas dentro de la función son borradas, al acceder nuevamente a la función las variables son nuevamente creadas, con el valor que les des, si no les das valor tomarán el que les es propio por fecto (0 para las numéricas, "" para los strings, etc..). entonces si quieres que una función 'recuerde' una variable entre llamadas, esto es que no la borre al salir de la función hay que declararla como Static, ejemplo:
--- Código: Text --- ' este ejemplo siempre la variable acumulador pierde su valor public function Sumar( valor as integer) as long dim acumulador as long ' cada vez que entre acumulador vale 0 acumulador=acumulador + valor sumar=acumulador 'cuando salga acumulador dejará de existir end function ' en este ejemplo la variable acumulador guarda su valor.. public function Sumar( valor as integer) as long static acumulador as long ' cada vez que entre acumulador vale lo que valía la última vez que se salió acumulador=acumulador + valor sumar=acumulador 'cuando salga acumulador seguirá existiendo end function
por último indicarte que desde un módulo para acceder a los controles situados en el formulario, deberás indicar además del nombre del control también el nombre del formulario, de otro modo no lo reconocerá, ejemplo: si tenía text1.text="Mi casa" desde un módulo tendrás que indicarlo así: Form1.text1.text="Mi casa" (form1 es el nombre que le hayas dado al formulario). Si tienes que usar muchas veces 'form1' en vez de usarlo cada vez puedes abreviarlo así:
--- Código: Text --- public sub Sumar(valor as integer) static acumulador as long with form1 .text1.text= acumulador + valor .command1.enabled=true end with end sub
observa que se escribe with nombreDelFormulario y se cierra con un 'end nombredelformulario' y nota que cada control referenciado lleva delante de su nombre un punto.
Saludos.
gabrielgc2002:
Pues muchas gracias, esta muy bien explicado para otra ocasión que se me ofrezca ya se como asarle, gracias de nuevo Nebire , Saludos :D
Navegación
[*] Página Anterior
Ir a la versión completa