elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 09:01  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  [RETO] Reemplazo de Funcion IsNumeric
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Reemplazo de Funcion IsNumeric  (Leído 3,453 veces)
79137913


Desconectado Desconectado

Mensajes: 780


4 Esquinas


Ver Perfil WWW
[RETO] Reemplazo de Funcion IsNumeric
« en: 10 Agosto 2011, 16:37 »

HOLA!!!

Viendo como ha decaido la actividad y nivel en el foro, me propongo aunque sea a que las nuevas mentes que hay aqui hagan un pequeño reto que les propongo...

El Reto es hacer una funcion que remplace efectivamente a la funcion IsNumeric que viene de fabrica en vb...

Deberan usar para nombrar la funcion un metodo como este:
Código
Private Function IsNumeric_SuNickReducido(str As String) As Boolean
'Ejemplos:
'Raul338:
Private Function IsNumeric_r338(str As String) As Boolean
'79137913:
Private Function IsNumeric_7913(str As String) As Boolean

Ejemplos de lo que devuelve la funcion original:
Código:
IsNumeric("asdf") ->False
IsNumeric("a12f") ->False
IsNumeric("12,12") ->True
IsNumeric("12.12") ->True
IsNumeric("12,23,34") ->False
IsNumeric("133.23.330") ->True
IsNumeric("36.658,30") ->True
IsNumeric("81,838.59") ->True

Espero que hayan entendido, TODOS pueden participar...

Es un reto dentro de todo simple...

Cuando esten todas las funciones se competira para encontrar al que hizo el codigo mas rapido(se mide con ctiming), luego se tomara de referencia la funcion original para ver si alguien la supera.

Notas:
·Las funciones y variables booleanas se inicializan en False.
·Se recomienda usar APIs.
·Se recomienda usar InStr.
·Se recomienda utilizar arrays de bytes.
·Se vale usar BadTypeConvert // EvilTypeConvert
·Recuerden que el tipo numerico mas rapido en vb es el Entero Largo (Long).


GRACIAS POR LEER!!!


« Última modificación: 10 Agosto 2011, 17:10 por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #1 en: 10 Agosto 2011, 17:53 »

Código
Public Function Is_NumberT(ByRef Str As String) As Boolean
On Error GoTo err
       Str = Str + 0
       Is_NumberT = True
       Exit Function
err:
End Function
 
 

Salu2  :-*


« Última modificación: 15 Agosto 2011, 18:09 por Tenient101 » En línea
79137913


Desconectado Desconectado

Mensajes: 780


4 Esquinas


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #2 en: 10 Agosto 2011, 18:24 »

HOLA!!!

No crei que a nadie se le ocurriera eso XD mi forma es Casi igual, justo estaba hablando con Raul338 y me dijo que era Magia Negra eso XD Pero me gusta asi...

En fin... Mi codigo:

Código
Private Function IsNumeric_7913(str As String) As Boolean
Dim x As Double
On Error GoTo Nonum
   x = str
   IsNumeric_7913 = True
Nonum:
End Function

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas
AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #3 en: 10 Agosto 2011, 18:44 »

Código
Option Explicit
 
 
Private Sub Command1_Click()
   Dim Dato As String
   Dato = Text1.Text
   MsgBox IsNumeric_Alx(Dato)
End Sub
 
Public Function IsNumeric_Alx(byval Dato As Variant) As Boolean
   Dim Temporal As String, X As Long
   Temporal = Dato
   For X = 0 To 9
       Temporal = Replace(Temporal, X, "")
   Next X
   If Len(Temporal) = 0 Then IsNumeric_Alx = True
End Function
 
En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #4 en: 10 Agosto 2011, 19:23 »

Código
Option Explicit
Private Const leTest As String = "asdf|a12f|12,12|12.12|12,23,34|133.23.330|36.658,30|81,838.59|11111111111111111111|1..3"
Private Const leSep As String = "|"
 
Private Sub Form_Load()
   Dim sTest() As String, i As Integer
   sTest = Split(leTest, leSep)
   For i = LBound(sTest) To UBound(sTest)
       Debug.Print sTest(i), IsNumeric_r338(sTest(i))
   Next
End Sub
 
' ==================================

Private Function IsNumeric_r338(str As String) As Boolean
   Dim cReg As Object
   Set cReg = CreateObject("VBScript.RegExp")
   With cReg
       ' Testeamos con . como separador de miles y , como separador de decimales
       ' Personalmente seria para mi "^-?(?:\d{1,3}(?:\.\d{3})*|\d+)(?:\,\d+)?$"
       ' ya que 133.23.330 no es un numero aunque IsNumeric diga que si ¬¬
       .Pattern = "^-?(?:\d{1,3}(?:\.\d{1,3})*|\d+)(?:\,\d+)?$"
       .Global = True
       .IgnoreCase = True
   End With
   IsNumeric_r338 = cReg.Test(str)
   If Not IsNumeric_r338 Then
       ' Testeamos con , como separador de miles y . como separador de decimales
       cReg.Pattern = "^(?:\d{1,3}(?:\,\d{3})*|\d+)(?:\.\d+)?$"
       IsNumeric_r338 = cReg.Test(str)
   End If
   Set cReg = Nothing
End Function
 

Soporta tantas cifras como caracteres que soporta string. Y números negativos :D

Código:
asdf          False
a12f          False
12,12         True
12.12         True
12,23,34      False
133.23.330    True
36.658,30     True
81,838.59     True
11111111111111111111        True
1..3          False
« Última modificación: 10 Agosto 2011, 19:26 por raul338 » En línea

TGa.

Desconectado Desconectado

Mensajes: 43



Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #5 en: 10 Agosto 2011, 20:14 »

hola ;D aca esta mi funcion

Código
Private Function IsNumeric_TGa(str As String) As Boolean
   Dim sAux As String
   Dim lPos As Long, lCont As Long, lAsc As Long
   lPos = 1
 
   Do While lPos <= Len(str)
       IsNumeric_TGa = True
       sAux = Mid$(str, lPos, 1)
       lAsc = Asc(sAux)
       If (lAsc >= 48 And lAsc <= 57) Or (lAsc >= 43 And lAsc <= 46) Then
           If lAsc = 44 Then
               lCont = lCont + 1
               If lCont > 1 Then
                   IsNumeric_TGa = False
                   Exit Function
               End If
           End If
       Else
           IsNumeric_TGa = False
           Exit Function
       End If
       lPos = lPos + 1
   Loop
End Function
 

Modificado: Espero que ahora funcione
« Última modificación: 11 Agosto 2011, 18:01 por TGa. » En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #6 en: 11 Agosto 2011, 01:36 »

No usar esta funcion para el test, usar la 2.1

http://foro.elhacker.net/programacion_visual_basic/reto_reemplazo_de_funcion_isnumeric-t336067.0.html;msg1651317#new

Hace mucho que no participo en retos aqui dejo mi codigo.

Es mucho codigo pero trabaja rapido e identico que isNumeric de VB.

Código:

Public Function isNumeric_Black(ByRef sString As String) As Boolean
'   //  Version 1.0
Dim lChar   As Long
Dim lPos    As Long
Dim lLn     As Long
Dim lSwich  As Long     '   //  Switcher

Const PUNTO_DECIMAL As Long = &H1
Const SIGNO_SUMA    As Long = &H2
Const SIGNO_RESTA   As Long = &H4
Const ENTER_BEGIN   As Long = &H8
'Const ENTER_END     As Long = &H10 '   //  Sin uso...

    lLn = Len(sString)
    If (lLn = 0) Then Exit Function
    For lPos = 1 To lLn
        lChar = Asc(Mid$(sString, lPos, 1))      ' // <--- Esta linea es seguro que redusca la velocidad del algoritmo...
        Select Case lChar
            Case Is >= 48 And cChar <= 57
                isNumeric_Black = True
                
            Case 32
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
                
            Case 46            '   //  "."  Solo 1
                If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
                lSwich = (lSwich Or PUNTO_DECIMAL)
                
            Case 43            '   //  "+" Solo 1
                If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
                lSwich = (lSwich Or SIGNO_SUMA)
                
            Case 45            '   //  "-"  Solo 1
                If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
                lSwich = (lSwich Or SIGNO_RESTA)
                
            Case 9              '   //  vbTab       Se permite la cantidad que sea.
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
                
            Case 13
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then Exit Function
                lSwich = (lSwich Or ENTER_BEGIN)
                
            Case 10
                If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN) Else Exit For
            
            Case Else
                Exit For
        End Select
    Next
End Function


Codigo completo de mi test:

Código:

Private Sub Form_Load()

    Debug.Print isNumeric_Black("+.0"),
    Debug.Print isNumeric("+.0")
    
    Debug.Print isNumeric_Black("+."),
    Debug.Print isNumeric("+.")
    
    Debug.Print isNumeric_Black("+"),
    Debug.Print isNumeric("+")
    
    Debug.Print isNumeric_Black("-"),
    Debug.Print isNumeric("-")
    
    Debug.Print isNumeric_Black("."),
    Debug.Print isNumeric(".")
    
    Debug.Print isNumeric_Black(vbTab & " .+0"),
    Debug.Print isNumeric(vbTab & " .+0")
    
    Debug.Print isNumeric_Black(".0"),
    Debug.Print isNumeric(".0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0")
    
    Debug.Print isNumeric_Black(vbTab & Space(10) & vbNewLine & " +-+-.+.0"),
    Debug.Print isNumeric(vbTab & Space(10) & vbNewLine & " +-+-.+.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0")

End Sub


OutPut:

Código:

Verdadero     Verdadero
Falso         Falso
Falso         Falso
Falso         Falso
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero


Temibles Lunas!¡.
« Última modificación: 13 Agosto 2011, 22:35 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #7 en: 11 Agosto 2011, 01:59 »

No usar esta funcion para el test, usar la 2.1

http://foro.elhacker.net/programacion_visual_basic/reto_reemplazo_de_funcion_isnumeric-t336067.0.html;msg1651317#new


Actualizo el codigo a una version 1.1...

Código:


Public Function isNumeric_Black(ByRef sString As String) As Boolean
'   //  Version 1.1 (Fixed)
Dim lChar   As Long
Dim lPos    As Long
Dim lLn     As Long
Dim lSwich  As Long     '   //  Switcher

Const PUNTO_DECIMAL As Long = &H1
Const SIGNO_SUMA    As Long = &H2
Const SIGNO_RESTA   As Long = &H4

    lLn = Len(sString)
    If (lLn = 0) Then Exit Function
    For lPos = 1 To lLn
        lChar = Asc(Mid$(sString, lPos, 1))     '   //  <--Esta linea puede reducir la velocidad del algoritmo..
        If (lChar >= 48 And lChar <= 57) Then
            isNumeric_Black = True
        Else
            Select Case lChar
                Case 46            '   //  "."  Solo 1
                    If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                    lSwich = (lSwich Or PUNTO_DECIMAL)
                    
                Case 43            '   //  "+" Solo 1
                    If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                    If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                    If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                    lSwich = (lSwich Or SIGNO_SUMA)
                    
                Case 45            '   //  "-"  Solo 1
                    If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                    If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                    If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                    lSwich = (lSwich Or SIGNO_RESTA)
                    
                '   //  Espacio, Tabulador, (13 + 10) = vbNewLine
                Case 32, 9, 13, 10, 11, 12, 36, 38, 160   '   //   Despues del 10 son otros Espacios en Blanco
                    If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                    
                Case Else
                    Exit For
                    
            End Select
        End If
    Next
End Function


Nuevo Codigo de test...

Código:

Private Sub Form_Load()
Dim i As Integer

    Debug.Print isNumeric_Black("0"),
    Debug.Print isNumeric("0")
    
    For i = 0 To 255
        If (isNumeric_Black(Chr(i) & "0") <> isNumeric(Chr(i) & "0")) Then
            Debug.Print isNumeric_Black(Chr(i) & "0"); isNumeric(Chr(i) & "0")
            Debug.Print Chr(i); i
        End If
    Next i
    
    Debug.Print isNumeric_Black("+0."),
    Debug.Print isNumeric("+0.")
    
    Debug.Print isNumeric_Black("+.  0"),
    Debug.Print isNumeric("+.  0")
    
    Debug.Print isNumeric_Black("+"),
    Debug.Print isNumeric("+")
    
    Debug.Print isNumeric_Black("+  0"),
    Debug.Print isNumeric("+  0")
    
    Debug.Print isNumeric_Black(Chr(10) & "-0"),
    Debug.Print isNumeric(Chr(10) & "-0")
    
    Debug.Print isNumeric_Black("."),
    Debug.Print isNumeric(".")
    
    Debug.Print isNumeric_Black(vbTab & " .+0"),
    Debug.Print isNumeric(vbTab & " .+0")
    
    Debug.Print isNumeric_Black(".0"),
    Debug.Print isNumeric(".0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0")
    
    Debug.Print isNumeric_Black(vbTab & Space(10) & vbNewLine & " +-+-.+.0"),
    Debug.Print isNumeric(vbTab & Space(10) & vbNewLine & " +-+-.+.0")
    
    Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0"),
    Debug.Print isNumeric(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0")

End Sub


Output:

Código:

Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero


Temibles Lunas!¡.
« Última modificación: 13 Agosto 2011, 22:36 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #8 en: 11 Agosto 2011, 02:20 »

HOLA!!!

No crei que a nadie se le ocurriera eso XD mi forma es Casi igual, justo estaba hablando con Raul338 y me dijo que era Magia Negra eso XD Pero me gusta asi...

En fin... Mi codigo:

Código
Private Function IsNumeric_7913(str As String) As Boolean
Dim x As Double
On Error GoTo Nonum
   x = str
   IsNumeric_7913 = True
Nonum:
End Function

GRACIAS POR LEER!!!

 :xD , y se me habia ocurrido sumarle 0, pero no se me ocurrio que al sumarle "0" es como si no hubiera pasado nada matematicamente y lo pudiera eliminar dejandolo igual que tu code  :laugh:

habria que testear la velocidad... un saludo!.
En línea
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 693


Seguime


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #9 en: 11 Agosto 2011, 04:48 »

Hola, esta solo implementa una forma de comprobar el tipo de variable, pero al final utiliza el error para comprovar
Código:
Private Function IsNumeric_LeandroA(expression) As Boolean
    Select Case VarType(expression)
        Case vbBoolean, vbByte, vbInteger, vbLong, vbCurrency, vbDecimal, vbDouble, vbNull, vbEmpty, vbError
            IsNumeric_LeandroA = True
        Case vbArray, vbDataObject, vbDate, vbObject, vbUserDefinedType
            IsNumeric_LeandroA = False
        Case vbString
            If Val(expression) <> 0 Then
                IsNumeric_LeandroA = True
            Else
                On Error Resume Next
                IsNumeric_LeandroA = Abs(expression) + 1
            End If
    End Select
End Function

lo unico que gana en velocidad es si el parametro no fue definido como string.

Código:
IsNumeric_LeandroA(85.54778)
 IsNumeric_LeandroA(-85.54778)
 IsNumeric_LeandroA(8554778)
 IsNumeric_LeandroA(me)
En línea

79137913


Desconectado Desconectado

Mensajes: 780


4 Esquinas


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #10 en: 11 Agosto 2011, 17:43 »

HOLA!!!

Antes de hacer la competencia les muestro donde sus funciones no funcionan igual que IsNumeric... Por favor corrijan y luego testeamos:

REVISEN EL SIGUIENTE POST

GRACIAS POR LEER!!!
« Última modificación: 15 Agosto 2011, 17:19 por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #11 en: 11 Agosto 2011, 19:42 »

.

usa la ultima funcion que postee (1.1 la que esta en geshi) la 1ra no sirve del todo bien.

Código
 
Private Sub Form_Load()
   MsgBox isNumeric_Black("12,23,34")
   MsgBox IsNumeric("12,23,34")
End Sub
 
 

OutPut

Código
 
Verdadero     Verdadero
 
 

Deberias usar tambien Strins con con Spacios en Blanco.

Temibles Lunas!¡.
« Última modificación: 11 Agosto 2011, 20:04 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #12 en: 13 Agosto 2011, 16:15 »

Actualización

Código
Public Function Is_NumberT(ByRef Str As String) As Boolean
On Error GoTo err
       Str = Str + 0
       Is_NumberT = True
       Exit Function
err:
End Function
« Última modificación: 13 Agosto 2011, 17:43 por Tenient101 » En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #13 en: 13 Agosto 2011, 16:38 »

Código
Private Function IsNumeric_r338v2(ByVal str As String) As Boolean
   Dim cReg As Object
   Set cReg = CreateObject("VBScript.RegExp")
   str = Trim$(str)
   With cReg
       ' Testeamos con . como separador de miles y , como separador de decimales
       ' Personalmente seria para mi "^-?(?:\d{1,3}(?:\.\d{3})*|\d+)(?:\,\d+)?$"
       ' ya que 133.23.330 no es un numero aunque IsNumeric diga que si ¬¬
       .Pattern = "^[+\-]?(?:\d{1,3}(?:\.\d{1,3})*|\d*)\,?\d*?$"
       .Global = True
       .IgnoreCase = True
   End With
   IsNumeric_r338v2 = cReg.Test(str)
   If Not IsNumeric_r338v2 Then
       While InStr(str, "..")
           str = Replace$(str, "..", vbNullString)
       Wend
       ' Testeamos con , como separador de miles y . como separador de decimales
       cReg.Pattern = "^[+\-]?(?:\d{1,3}(?:\,\d{3})*|\d+)\.?\d*$"
       IsNumeric_r338v2 = cReg.Test(str)
   End If
   Set cReg = Nothing
End Function
 

Obviamente ya no es la mas rápida, lo arregle para los caprichos de IsNumeric (desde cuando 1..2..3 es un numero?!!!)

Código:
sTest                  IsNumeric_r338   IsNumeric  CDbl(sTest)
1..3                   Verdadero        Verdadero       13
+33.2                  Verdadero        Verdadero       332
11111111111111111111   Verdadero        Verdadero       1,11111111111111E+19
12,12                  Verdadero        Verdadero       12,12
12.12                  Verdadero        Verdadero       1212
133.23.330             Verdadero        Verdadero       13323330
36.658,30              Verdadero        Verdadero       36658,3
81,838.59              Verdadero        Verdadero       81,83859
-65,1                  Verdadero        Verdadero       -65,1
12,23,34               Falso            Falso      
asdf                   Falso            Falso      
a12f                   Falso            Falso      
1..1                   Verdadero        Verdadero       11
1,,1                   Falso            Falso      
1..2..3                Verdadero        Verdadero       123
« Última modificación: 13 Agosto 2011, 19:32 por raul338 » En línea

Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: [RETO] Reemplazo de Funcion IsNumeric
« Respuesta #14 en: 13 Agosto 2011, 17:17 »

Observaciones

Código:
'LeandroA falla en "1. .2..3 "
'r338v2 falla en "1..2..3 "
'TGa falla en "1..2..3 "
'Alx falla en "1..2..3 "
'Black falla en "1. .2..3"

Salu2
En línea
Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RETO] Funcion iFactorize() - Factorizacion de numeros enteros « 1 2 »
Programación Visual Basic
Karcrack 15 2,942 Último mensaje 19 Julio 2010, 17:19
por FFernandez
Reto: puedes descifrar esta pequeña funcion Php??
PHP
PanConMantequilla 12 1,782 Último mensaje 6 Agosto 2010, 04:03
por Castg!
Reemplazo de Memoria
Windows
mhoker 2 961 Último mensaje 13 Diciembre 2010, 07:00
por Randomize
[RETO] Reemplazo de Operadores Binarios.
Programación Visual Basic
79137913 3 609 Último mensaje 8 Abril 2011, 14:12
por 79137913
[C]isNumeric (VB6 a C)
Programación C/C++
BlackZeroX (Astaroth) 8 917 Último mensaje 20 Agosto 2011, 03:21
por BlackZeroX (Astaroth)
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines