Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-07-2007
Avatar de Nomad
Nomad Nomad is offline
Miembro
 
Registrado: abr 2007
Ubicación: Sarchi,Costa Rica
Posts: 107
Poder: 18
Nomad Va por buen camino
Saber si es un numero

Como hace uno para saber si lo que estoy leyendo de un dbstringgrid es un numero o una letra?

Gracias
__________________
Quisiera cambiar el mundo, pero no me dan el código fuente.
Responder Con Cita
  #2  
Antiguo 06-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
La verdad es que no conozco el TDBStringGrid, pero Con un TEdit se puede hacer asi:
Código Delphi [-]
 
var
  N :Integer;
begin
  N := StrToIntDef(Edit1.Text, -1);
  if N = -1 then
    ShowMessage('Letra')
  else
    ShowMessage('Numero');
end;
Si adecuas este ejemplo a lo que necesitas seguramente te sera útil.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 06-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
No tengo delphi a mano ahorita pero tambien esta la funcion IsNumeric que devuelve true si es un numero

Código Delphi [-]
if IsNumeric(StringGrid1.Cells[x,y]) then
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 06-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
No se si me equivoco, pero tengo entendido que IsNumeric solo recibe como parámetro un Char, de manera que solo servirá para comprobar los números del 0 al 9.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Por eso decia que no tenia delphi a mano de hecho lo escribi de memoria, es mas despues que postee me puse a pensar si no sera de otro lenguaje
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Pero siempre podremos hacer nuestra función personalizada .
Código Delphi [-]
 
function TForm1.EsNumero(Numero: String): Boolean;
var
  i :Integer;
begin
  i := 0;
  Result := True;
  while ((i <= Length(Numero)-1) and (Result = True)) do
  begin
    inc(i);
    Result := IsNumeric(Numero[i]);
  end;
end;
Para usarla es:
Código Delphi [-]
 if EsNumero(StringGrid1.Cells[x,y]) then
  begin
    ShowMessage('Es Numerico¡');
  end
  else
  begin
    ShowMessage('Es Alfanumerico¡');
  end;

Nota: IsNumeric pertenece a la unidad IdGlobal.Pas
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Un pequeño ajuste a esa función ya que si le envían '' me diría que es Numérico y si envían un numero negativo diría que es alfanumerico:
Código Delphi [-]
 
function TForm1.EsNumero(Numero: String): Boolean;
var
  i :Integer;
begin
  i := 0;
  Result := (Length(Numero)<>0);
  while ((i <= Length(Numero)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(Numero[i]) or (Numero[i]='-'));
  end;
end;

Seguro que esa función debe tener errores aun, pues no tiene en cuenta los flotantes o si le envian algo como -1222-566 tambien presentaria problemas, pero alli se las dejo por si alguien quiere refinarla.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 07-07-2007 a las 00:34:56.
Responder Con Cita
  #8  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Buena esa jhonny

yo añadiria

Código Delphi [-]
function TForm1.EsNumero(Numero: String): Boolean;
var
  i :Integer;
begin
  i := 0;
  Result := (Length(Numero)<>0);
  while ((i <= Length(Numero)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(Numero[i]) or (Numero[i]='-') or (Numero[i]=DecimalSeparator) );
  end;
end;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #9  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
No la he probado pero esto deberia funcionar

Código Delphi [-]
function TTexto.EsNumero(cValor: String): Boolean
var
  i :Integer;
  nSigno, nSeparador: Integer;  //nSigno cuenta la cantidad de signos escritas debe ser solo uno nSimbolo la cantidad de simbolo decimal
begin
  i := 0;
  Result := (Length(cValor)>0);
  while ((i <= Length(cValor)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(cValor[i]) or ((cValor[i]='-') and (nSigno = 0)) or ((cValor[i]=DecimalSeparator) and (nSeparador = 0));
    //Determina si se escribio para incrementar el contador
    if (cValor[i]='-') then
       Inc(nSigno);
    if (cValor[i]=DecimalSeparator) then
       Inc(nSeparador);
  end;
end;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #10  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
, Bueno, pero entonces el problema ahora sería porque el siguiente tampoco es un numero y dicha función dirá que si:

9999-

Este tipo de cosas son realmente curiosas .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #11  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Ahora el siguiente tendría problema también:

999-999

Caracoles, cada vez le encuentro mas problemas, creo que tendré que ponerme a buscar soluciones .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #12  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por jhonny
Caracoles, cada vez le encuentro mas problemas, creo que tendré que ponerme a buscar soluciones .
jajaja pues bienvenida sea la ayuda, pero creo que la solucion es facil

Código Delphi [-]
function TTexto.EsNumero(cValor: String): Boolean
var
  i :Integer;
  nSigno, nSeparador: Integer;  //nSigno cuenta la cantidad de signos escritas debe ser solo uno nSimbolo la cantidad de simbolo decimal
begin
  i := 0;
  Result := (Length(cValor)>0);
  while ((i <= Length(cValor)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(cValor[i]) or ((cValor[i]='-') and (nSigno = 0) and (i = 1)) or ((cValor[i]=DecimalSeparator) and (nSeparador = 0));
    //Determina si se escribio para incrementar el contador
    if (cValor[i]='-') then
       Inc(nSigno);
    if (cValor[i]=DecimalSeparator) then
       Inc(nSeparador);
  end;
end;

Ahora solo falta saber si le sirvio la respuesta a nomad para pasarle la factura jejeje
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #13  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Jejeje, no he probado tu solución aun pero me imagino que con el siguiente dirá que es numero

9999. //Nunca he visto un numero con ese punto al final
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #14  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Que tal asi?, la probé y funciono, con las condiciones que hemos nombrado hasta aquí:

Código Delphi [-]
var
  i :Integer;
  nSigno, nSeparador: Integer;  //nSigno cuenta la cantidad de signos escritas debe ser solo uno nSimbolo la cantidad de simbolo decimal
begin
  i := 0;
  nSigno := 0;
  nSeparador := 0;
  Result := (Length(cValor)>0);
  while ((i <= Length(cValor)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(cValor[i]) or ((cValor[i]='-') and (nSigno = 0) and (i = 1)) or ((cValor[i]=DecimalSeparator) and (nSeparador = 0) and (i <> Length(cValor))));
    //Determina si se escribio para incrementar el contador
    if (cValor[i]='-') then
       Inc(nSigno);
    if (cValor[i]=DecimalSeparator) then
       Inc(nSeparador);
  end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #15  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por eduarcol
Ahora solo falta saber si le sirvio la respuesta a nomad para pasarle la factura jejeje
Jejeje, Cierto¡¡¡, Ojala le sirva una de tantas cosas que hemos dicho aquí .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #16  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Aja mas problemas a ver a ver
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #17  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por eduarcol
Aja mas problemas a ver a ver
Solo una cosa, ¿El siguiente debería considerarse como numero? (Omitiendo las comillas),
"999 " (Con espacio al final, por ejemplo).
Esa función dirá que es alfanumérico. Pero la siguiente no.

Código Delphi [-]
 
function TTexto.EsNumero(cValor: String): Boolean;
var
  i :Integer;
  nSigno, nSeparador: Integer;  //nSigno cuenta la cantidad de signos escritas debe ser solo uno nSimbolo la cantidad de simbolo decimal
begin
  cValor := Trim(cValor);
  i := 0;
  nSigno := 0;
  nSeparador := 0;
  Result := (Length(cValor)>0);
  while ((i <= Length(cValor)-1) and (Result = True)) do
  begin
    inc(i);
    Result := (IsNumeric(cValor[i]) or ((cValor[i]='-') and (nSigno = 0) and (i = 1)) or ((cValor[i]=DecimalSeparator) and (nSeparador = 0) and (i <> Length(cValor))));
    //Determina si se escribio para incrementar el contador
    if (cValor[i]='-') then
       Inc(nSigno);
    if (cValor[i]=DecimalSeparator) then
       Inc(nSeparador);
  end;
end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #18  
Antiguo 07-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Ok jhonny hoy tengo el cerebro en off por mas qe trato le busco problemas y no se me ocurre ni uno jejeje

creo que me gusta mas pensar en soluciones que en problemas
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #19  
Antiguo 07-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por eduarcol
Ok jhonny hoy tengo el cerebro en off por mas qe trato le busco problemas y no se me ocurre ni uno jejeje

creo que me gusta mas pensar en soluciones que en problemas
Bueno, la naturaleza humana es la que hace que seamos optimistas en estos casos . Seguramente si no tuvieramos esa actitud nunca hubiéramos inventado algo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #20  
Antiguo 07-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Código Delphi [-]
function EsNumero(cValue: string):Boolean;
var i,Estado:Byte;
begin
 if Length(cValue)>0 then
  Estado:=1
 else
  Estado:=0;
 i:=1;
 while (i<=Length(cValue))and(Estado<>0) do
  begin
    case Estado of
     1:case cValue[i] of
        '0'..'9':Estado:=2;
        '-':Estado:=3;
        else Estado:=0;
       end;
     2:case cValue[i] of
        '0'..'9':Estado:=2;
       '.':Estado:=4;
       '-':Estado:=0;
        else Estado:=0;
       end;
     3:case cValue[i] of
       '0'..'9':Estado:=2;
        else Estado:=0;
       end;
     4:case cValue[i] of
        '0'..'9':Estado:=5;
        else Estado:=0;
       end;
     5:case cValue[i] of
        '0'..'9':Estado:=5;
        else Estado:=0;
       end;
    end;
   Inc(i)
  end;
 Result:=(Estado in [2,5])
end;
Con un Autómata

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 if EsNumero(edit1.Text) then
  ShowMessage('si')
 else
  ShowMessage('no')
end;
Así se llamaría, si no me equivoco...... funciona en todos los casos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber si un texto es un número elcigarra OOP 29 30-09-2006 00:25:56
Saber el número de serie de la placa fer21unmsm Varios 3 30-12-2005 18:36:51
como saber el numero de renglones ddd_ddd OOP 4 27-10-2005 21:27:56
Saber el numero de caracteres de un memo judoboy Varios 1 20-06-2003 14:27:19
Saber el numero de registros consultados estudiante SQL 2 13-05-2003 00:12:09


La franja horaria es GMT +2. Ahora son las 03:42:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi