Lo que pasa es que necesito compararmuchos rangos para hacer un programa, pero mucha gente me ha dicho que los IF's ocupan muchos recursos y no son optimos para grandes comparaciones.
Lo que quiero hacer es algo como esto:
Public a
Private Sub Command1_Click()
a = Text1.Text
If (a >= 0) And (a <= 9) Then
MsgBox ("El numero esta entre 0 y 9")
ElseIf (a >= 10) And (a <= 19) Then
MsgBox ("El numero esta entre 10 y 19")
ElseIf (a >= 20) And (a <= 29) Then
MsgBox ("El numero esta entre 10 y 19")
Else
MsgBox ("El numero es mayor o igual que 30 o es un caracter no numerico")
End If
End Sub
claro que no seria solo 4 o 5 comparaciones, son al rededor de 40 aprox xD por lo que se podria hacer asi pero no seria lo optimo :rolleyes:
Saludos y gracias de antemano :)
Intenta hacerlo con un "case". Por internet encontrarás ejemplos miles, no creo que te cueste nada y es una alternativa a probar a los if's.
Cita de: skapunky en 10 Enero 2009, 00:59 AM
Intenta hacerlo con un "case". Por internet encontrarás ejemplos miles, no creo que te cueste nada y es una alternativa a probar a los if's.
aja habia pensado en Select Case.Index pero seria mas rollo que con el if no? eso si, seria mas optimo?
Hombre..rollo mas o menos es lo mismo pero si, seria más optimo, eso sin duda.
el Select Case es mas ordenado que el "IF" a la vista de eso no hay duda...
y como seria la sintaxis?
Select Case (a)
case 0 (a >= 0) And (a <= 9)
sentencias
case 1 (a >= 10) And (a <= 19)
sentencias
case 2 (a >= 20) And (a <= 29)
sentencias
case else
end select
eso seria o no?
holas haci
din variable
select case variable
case varlor1
sentecia
case valor2
sentecia
case esle
´como el else del if
end select case
listo.
con lo que pusiste hoy seria asi:
Option Explicit
Public a As Integer
Private Sub Command1_Click()
a = 5
If Not IsNumeric(a) Then MsgBox ("Debe ser Numerico"): Exit Sub
Select Case a
Case 0 To 9
MsgBox ("El numero esta entre 0 y 9")
Case 10 To 19
MsgBox ("El numero esta entre 10 y 19")
Case 20 To 29
MsgBox ("El numero esta entre 20 y 29")
Case Is >= 30
MsgBox ("El numero es mayor o igual que 30")
Case Else
MsgBox ("Ingresaste un Numero Negativo?? xD")
End Select
End Sub
acostumbrate a declarar las variables y con algun tipo de dato...
Cita de: <[(x)>]holas así
Código:
din variable
select case variable
case varlor1
sentecia
case valor2
sentecia
case esle
´como el else del if
end select case
listo.
termina en
End Select no en
End Select Case :xD
saludos.
CitarCódigo
Option Explicit
Public a As Integer
Private Sub Command1_Click()
a = 5
If Not IsNumeric(a) Then MsgBox ("Debe ser Numerico"): Exit Sub
Select Case a
Case 0 To 9
MsgBox ("El numero esta entre 0 y 9")
Case 10 To 19
MsgBox ("El numero esta entre 10 y 19")
Case 20 To 29
MsgBox ("El numero esta entre 20 y 29")
Case Is >= 30
MsgBox ("El numero es mayor o igual que 30")
Case Else
MsgBox ("Ingresaste un Numero Negativo?? xD")
End Select
End Sub
tenes toda la razon.. es asi como se hace :P
esto q habian posteado.. esta mal hecho.. seria como usar el select case como un if.. donde el numero recorreria solo un case, y solo un if...:S
CitarSelect Case (a)
case 0 (a >= 0) And (a <= 9)
sentencias
case 1 (a >= 10) And (a <= 19)
sentencias
case 2 (a >= 20) And (a <= 29)
sentencias
Solo sirve para visualisar en que rango esta un numero de 0 a 9 , 10 a 19, 20 a 29, etc... asi como se menciona, ojo no se si te llegue a sirvir para lo que desees.
Soporta numeros esesivamente numeros grandes por ejemplo:
5564544165465715917671651713681798179817373878173873817878973146574654314634136713614
Dando resultado el numero completo (sin las "E" 55645441654657159176716517136817e+127 o algo asi era)
El numero esta entre
5564544165465715917671651713681798179817373878173873817878973146574654314634136713610
y
5564544165465715917671651713681798179817373878173873817878973146574654314634136713619
SOLO sirviria si se muestra Texto, o si se manejara el Callbyname() O.o! pero limitado...¡! (a este ultmo solo se jalaria el nombre del proceso del archivo condif.ini y se plantaria en el proceso Callbyname() se me ocurre, estaria limitado esto ¬¬" como lo veo ), seria una forma mas cnfortable y sin tanto "Select Case" o tantos "If Then" y demas
Ojo use un archivo config.ini en c:\ pero pudo haber sido de iual forma dentro del mismo programa los texto pero igual.
Aca lo debo
Nesesitarian solo:
1 textbox
1 commandbutton
2 label
Pegar el siguiente codigo en un formualrio:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Command1_Click()
Dim Numero As String
Dim Str0 As String, Str1 As String
Dim Num0 As String, Num1 As String
Numero = Text1.Text
If Not IsNumeric(Numero) Then Label1.Caption = Numero & " <-- NO es un numero": Exit Sub
If (Len(Numero) - 1 > 0) Then
Str0 = Mid(Numero, 1, Len(Numero) - 1)
Else
Str0 = "" 'Mid(Numero, 1, Len(Numero))
End If
Num0 = Str0 & 0
Num1 = Str0 & 9
Label1.Caption = LeerINI("numeros", Num0 & "*-*" & Num1, "no existe clave", "c:\config.ini")
label2.Caption = "El numero esta entre " & Num0 & " y " & Num1
'callbyname(....)
End Sub
Public Function LeerINI(sección As String, Llave As String, Pre As Variant, strpatch As String) As String
On Error Resume Next
Dim Str As String
Str = String(255, Chr(0))
d = GetPrivateProfileString(sección, ByVal Llave, Pre, Str, Len(Str), strpatch)
LeerINI = Trim(Str)
End Function
Un archivo config.ini ya hecho:
[numeros]
0*-*9=la pera esta en 0 y 9
10*-*19=la manzana esta en 10 y 19
20*-*29=jaimico esta en 20 y 29
30*-*39=chucharunga esta entre 30 y 39
40*-*49=doña petaca esta entre 40 y 49
50*-*59=canuta entre 50 y 59
60*-*69=popis entre 60 y 69
70*-*79=jodido caracter entre 70 y 79
80*-*89=chahca entre 80 y 89
90*-*99=se me acaba entre 90 y 99
100*-*109=jodines entre 100 y 109
110*-*119=maldita sea 110 y 119
120*-*129=odio a entre 120 y 129
130*-*139=cojones del mal entre 130 y 139
140*-*149=me ando artando entre 140 y 149
150*-*159=tito entre 150 y 159
160*-*169=lucifer entre 160 y 169
170*-*179=san miguel entre 170 y 179
180*-*189=san antonio abad entre 180 y 189
190*-*199=san lucas?¿ entre 190 y 199
-0*-*-9=la pera esta en -0 y -9 |--->(Numero negativo)
-10*-*-19=la manzana esta en -10 y -19 |--->(Numero negativo)
-20*-*-29=jaimico esta en -20 y -29 |--->(Numero negativo)
-30*-*-39=chucharunga esta entre -30 y -39 |--->(Numero negativo)
-40*-*-49=doña petaca esta entre -40 y -49 |--->(Numero negativo)
-50*-*-59=canuta entre -50 y -59 |--->(Numero negativo)
-60*-*-69=popis entre -60 y -69 |--->(Numero negativo)
-70*-*-79=jodido caracter entre -70 y -79 |--->(Numero negativo)
-80*-*-89=chahca entre -80 y -89 |--->(Numero negativo)
-90*-*-99=se me acaba entre -90 y 99 |--->(Numero negativo)
-100*-*-109=jodines entre -100 y -109 |--->(Numero negativo)
-110*-*-119=maldita sea -110 y -119 |--->(Numero negativo)
-120*-*-129=odio a entre -120 y -129 |--->(Numero negativo)
-130*-*-139=cojones del mal entre -130 y -139 |--->(Numero negativo)
-140*-*-149=me ando artando entre -140 y -149 |--->(Numero negativo)
-150*-*-159=tito entre -150 y -159 |--->(Numero negativo)
-160*-*-169=lucifer entre -160 y -169 |--->(Numero negativo)
-170*-*-179=san miguel entre -170 y -179 |--->(Numero negativo)
-180*-*-189=san antonio abad entre -180 y -189 |--->(Numero negativo)
-190*-*-199=san lucas?¿ entre -190 y -199 |--->(Numero negativo)
Cita de: seba123neo en 10 Enero 2009, 04:14 AM
con lo que pusiste hoy seria asi:
Option Explicit
Public a As Integer
Private Sub Command1_Click()
a = 5
If Not IsNumeric(a) Then MsgBox ("Debe ser Numerico"): Exit Sub
Select Case a
Case 0 To 9
MsgBox ("El numero esta entre 0 y 9")
Case 10 To 19
MsgBox ("El numero esta entre 10 y 19")
Case 20 To 29
MsgBox ("El numero esta entre 20 y 29")
Case Is >= 30
MsgBox ("El numero es mayor o igual que 30")
Case Else
MsgBox ("Ingresaste un Numero Negativo?? xD")
End Select
End Sub
acostumbrate a declarar las variables y con algun tipo de dato...
Muchas gracias por el ejemplo y el consejo me quedo bastante claro ;D te lo agradezco.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Enero 2009, 19:38 PM
Solo sirve para visualisar en que rango esta un numero de 0 a 9 , 10 a 19, 20 a 29, etc... asi como se menciona, ojo no se si te llegue a sirvir para lo que desees.
Soporta numeros esesivamente numeros grandes por ejemplo:
5564544165465715917671651713681798179817373878173873817878973146574654314634136713614
Dando resultado el numero completo (sin las "E" 55645441654657159176716517136817e+127 o algo asi era)
El numero esta entre
5564544165465715917671651713681798179817373878173873817878973146574654314634136713610
y
5564544165465715917671651713681798179817373878173873817878973146574654314634136713619
SOLO sirviria si se muestra Texto, o si se manejara el Callbyname() O.o! pero limitado...¡! (a este ultmo solo se jalaria el nombre del proceso del archivo condif.ini y se plantaria en el proceso Callbyname() se me ocurre, estaria limitado esto ¬¬" como lo veo ), seria una forma mas cnfortable y sin tanto "Select Case" o tantos "If Then" y demas
Ojo use un archivo config.ini en c:\ pero pudo haber sido de iual forma dentro del mismo programa los texto pero igual.
Aca lo debo
Nesesitarian solo:
1 textbox
1 commandbutton
2 label
Pegar el siguiente codigo en un formualrio:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Command1_Click()
Dim Numero As String
Dim Str0 As String, Str1 As String
Dim Num0 As String, Num1 As String
Numero = Text1.Text
If Not IsNumeric(Numero) Then Label1.Caption = Numero & " <-- NO es un numero": Exit Sub
If (Len(Numero) - 1 > 0) Then
Str0 = Mid(Numero, 1, Len(Numero) - 1)
Else
Str0 = "" 'Mid(Numero, 1, Len(Numero))
End If
Num0 = Str0 & 0
Num1 = Str0 & 9
Label1.Caption = LeerINI("numeros", Num0 & "*-*" & Num1, "no existe clave", "c:\config.ini")
label2.Caption = "El numero esta entre " & Num0 & " y " & Num1
'callbyname(....)
End Sub
Public Function LeerINI(sección As String, Llave As String, Pre As Variant, strpatch As String) As String
On Error Resume Next
Dim Str As String
Str = String(255, Chr(0))
d = GetPrivateProfileString(sección, ByVal Llave, Pre, Str, Len(Str), strpatch)
LeerINI = Trim(Str)
End Function
Un archivo config.ini ya hecho:
[numeros]
0*-*9=la pera esta en 0 y 9
10*-*19=la manzana esta en 10 y 19
20*-*29=jaimico esta en 20 y 29
30*-*39=chucharunga esta entre 30 y 39
40*-*49=doña petaca esta entre 40 y 49
50*-*59=canuta entre 50 y 59
60*-*69=popis entre 60 y 69
70*-*79=jodido caracter entre 70 y 79
80*-*89=chahca entre 80 y 89
90*-*99=se me acaba entre 90 y 99
100*-*109=jodines entre 100 y 109
110*-*119=maldita sea 110 y 119
120*-*129=odio a entre 120 y 129
130*-*139=cojones del mal entre 130 y 139
140*-*149=me ando artando entre 140 y 149
150*-*159=tito entre 150 y 159
160*-*169=lucifer entre 160 y 169
170*-*179=san miguel entre 170 y 179
180*-*189=san antonio abad entre 180 y 189
190*-*199=san lucas?¿ entre 190 y 199
-0*-*-9=la pera esta en -0 y -9 |--->(Numero negativo)
-10*-*-19=la manzana esta en -10 y -19 |--->(Numero negativo)
-20*-*-29=jaimico esta en -20 y -29 |--->(Numero negativo)
-30*-*-39=chucharunga esta entre -30 y -39 |--->(Numero negativo)
-40*-*-49=doña petaca esta entre -40 y -49 |--->(Numero negativo)
-50*-*-59=canuta entre -50 y -59 |--->(Numero negativo)
-60*-*-69=popis entre -60 y -69 |--->(Numero negativo)
-70*-*-79=jodido caracter entre -70 y -79 |--->(Numero negativo)
-80*-*-89=chahca entre -80 y -89 |--->(Numero negativo)
-90*-*-99=se me acaba entre -90 y 99 |--->(Numero negativo)
-100*-*-109=jodines entre -100 y -109 |--->(Numero negativo)
-110*-*-119=maldita sea -110 y -119 |--->(Numero negativo)
-120*-*-129=odio a entre -120 y -129 |--->(Numero negativo)
-130*-*-139=cojones del mal entre -130 y -139 |--->(Numero negativo)
-140*-*-149=me ando artando entre -140 y -149 |--->(Numero negativo)
-150*-*-159=tito entre -150 y -159 |--->(Numero negativo)
-160*-*-169=lucifer entre -160 y -169 |--->(Numero negativo)
-170*-*-179=san miguel entre -170 y -179 |--->(Numero negativo)
-180*-*-189=san antonio abad entre -180 y -189 |--->(Numero negativo)
-190*-*-199=san lucas?¿ entre -190 y -199 |--->(Numero negativo)
mmm interesante, con esto se soluciona un problema que estaba pensando que seria el actualizar la aplicacion, podria cambiar la ruta del config.ini de C a la carpeta donde este el programa con ".\config.ini" y para que no se pierda ni lo editen podria juntarlo en un solo exe con el Auto It asi no le meterian mano y lo podria actualizar yo... xD o quien sepa desarmarlo claro xD.
Voy a probar con el ejemplo de Seba123neo y a entender el code de ░▒▓BlackZeroҖ▓▒░antes de usarlo xD ya que no entendi muy bien a que se refiere con "no existe clave" asi que debo leerlo con calma y concentracion :xD
Bueno Saludos y muchas gracias por sus respuestas me ayudaron un monton!
Perdon por el doble post, pero el anterior ya estaba medio saturado con citas xD
Pensaba algo, me gustaria que me lo confirmen o me corrijan.
La idea de el programa que quiero hacer solo arroja 3 resultados en aproximadas 200 comparaciones, el uso del ini me dio una idea que no se si sea posible o no.
Se podria hacer 3 INIs y que buscara en los 3 y dependiendo de en cual encuentre la condicion verdadera arroje cierto resultado?
osea:
Condicion1.ini
Condicion2.ini
Condicion3.ini
si esta en la condicion1 muestra "hola"
si esta en la condicion2 muestra "chao"
Si esta en la condicion3 muestra "Hasta luego"
si no esta "No esta xD"
a lo mejor suena idiota pero no se me ocurre, tambien estaba pensando usar 3 .txt para que fuera mas sencilla la "actualizacion" del programa...
A ver que piensan
todo hazlo en un solo archivo ini
[Sección1]
valor1=datos1 de Sección1
valor2=valor2 de Sección1
etc...
[Sección2]
valor1=datos1 de Sección2
valor2=valor2 de Sección2
etc...
[Sección3]
valor1=datos1 de Sección3
valor2=valor2 de Sección3
etc...
Ve el codigo que puse anteriormente en este post seguro te ayuda si lo lees bien al derecho y alrevez...
Solo lee por decir la paca deseada lo pongo de esa forma para que te deees una idea..."
Igual puedes usar varios archivos ini pero no creo que te sirva de mucho
Bueno ya ordene mis datos, tengo que hacer 130 comparaciones xD
A ver sí me funciona. Gracias.