Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   variable que solo guarde cifras de una cadena (https://www.clubdelphi.com/foros/showthread.php?t=30528)

edusus 08-04-2006 21:19:11

variable que solo guarde cifras de una cadena
 
Hola amigos,
¿Cómo puedo hacer para que de una cadena de texto solo se guarden en una variable las cifras?. Lo explico con un ejemplo: Si una entrada es: '58' o 'tengo 58' o 'Hay 58 solamente'. En cualquiera de los tres casos a mi me interesa '58' para pasarlo a entero y operar con esa cifra. Si convirtiera la entrada a entero en los dos últimos casos me daría error. ¿Cómo puedo hacer?

marcoszorrilla 08-04-2006 21:43:19

Prueba esto con un Edit:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
n:Integer;
s:String;
begin
 For n:=0 to Length(Edit1.Text) do
 begin
   if (Ord(Edit1.text[n]) >=48) and (Ord(Edit1.text[n]) <=57)  then
   S:=S+Edit1.text[n];
 end;

 ShowMessage(s);

end;

Un Saludo.

dec 08-04-2006 23:14:24

Hola,

Creo que este tipo de entradas son propensas a fallar, pero, en fin, no me quedo con las ganas:

Código Delphi [-]
function DirtyIntToStr
(str: string): string;
var
  pStr: PChar;
begin
  pStr := PChar(str);
  while (pStr^<>#0)do
  begin
    if (pStr^in['0'..'9']) then
      Result := Result + pStr^;
    Inc(pStr);
  end;
end;
Y, casi por el mismo precio:

Código Delphi [-]
function DirtyFloatToStr
 (str: string): string;
var
  pStr: PChar;
begin
  pStr := PChar(str);
  while (pStr^<>#0)do
  begin
    if (pStr^in['0'..'9',DecimalSeparator]) then
      Result := Result + pStr^;
    Inc(pStr);
  end;
end;
Nota: no lo hagan en sus casas; si tienen, escogan otras alternativas. ;)

Segunda nota: lo siento Marcos, no tiene nada que ver con tu respuesta, es que no he podido evitarlo. :D

edusus 09-04-2006 01:13:36

Funciona la de marcos
 
Marcos, funciona pero no entiendo el código :)

edusus 09-04-2006 01:14:17

Gracias a los dos
 
Gracias Marcos y gracias David por contestarme.

marcoszorrilla 09-04-2006 10:43:29

Pues se trata de un simple bucle For para recorrer la cadena de carácter en carácter.

Luego comprobamos que sea un número y si es así lo agregamos a la segunda variable.

El valor ASCII de los números va desde el 0 (48) hasta el 9(57), como la función ORD, devuelve ese valor, de ahí la comprobación si está en este rango de valores, si es así se trata de un número y lo añadimos a la variable.

Código Delphi [-]
S:=S+Edit1.Text[n];

n actúa como subindice para poder recorrer los caracteres de uno en uno.

Creo que así esté fácil de entender.

Un Saludo.

edusus 09-04-2006 23:12:30

Gracias Marcos, lo que me confundía era lo del 48 y 57 que no me daba cuenta de donde salían.


La franja horaria es GMT +2. Ahora son las 08:00:50.

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