Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Saber si un texto es un número (https://www.clubdelphi.com/foros/showthread.php?t=36037)

elcigarra 29-09-2006 20:02:57

Saber si un texto es un número
 
Existe alguna función para saber si un texto represanta algún número sin tener que recurrir al control de excepciones?
ej:
Código:

var
  Numero : string
begin
  if isNAN(StrToFloat(Numero)) then
  //.......

En este caso la función StrToFloat eleva una excepción de punto flotante. La pregunta es si existe alguna función que evalúe el texto antes de intentar realizar la operación...

elcigarra 29-09-2006 20:04:29

perdón... en el ejemplo anterior supongan que a la variable número le doy un valor (que no sea un número) antes de la función "isNaN". Ya sé que no estaba inicializada en el ejemplo

Caral 29-09-2006 20:13:48

Hola
Este es parte de un ejemplo que puso Bicho en algun hilo.
En El evento OnKeyPress del edit o dbedit pon:
Código Delphi [-]
if key in ['0'..'9'] then
// Aqui pones lo que neceitas
Con esto si hay algun numero lo indica
Hay que buscar para encontrar:D
Saludos

seoane 29-09-2006 20:15:50

Podemos hacer algo así:
Código Delphi [-]
var
  Numero: String;
  Valor: Extended;
begin
  Numero:= '1,25';
  if TextToFloat(PChar(Numero),Valor,fvExtended) then
  begin
    // Aqui lo que quieras
  end;
end;

menavas 29-09-2006 20:18:28

buenas, yo utilizaria un bloque try... except


Código Delphi [-]
 try
  strtoint(key)
except
 //Colocas tu codigo para manejar la excepcion
end;
saludos!:)

Caral 29-09-2006 20:21:37

Hola
Ya que estas por aqui seoane, quisiera que me evacuaras una consulta con respecto al codigo que pusiste.
Al usar variables, no estoy utilizando memoria adicional?
El uso de variables es mejor limitarlo o por el contrario un bite o mas no son gran desplome ?
Perdona que te haga esta pregunta en este hilo, pero se dio la ocasion.
Saludos Maestro

seoane 29-09-2006 20:27:06

:confused: Lo siento Caral, pero no te entiendo muy bien. A que te refieres con "usar variables". Y cuando dices que usa mas memoria, ¿con resecto a que otro metodo?.

Caral 29-09-2006 20:34:28

Gracias Seoane
Dicen que la pregunta mas tonta es la que no se hace
Al Hacer esto:
Código Delphi [-]
var
  Numero: String;
  Valor: Extended;
No Estas utilizando una Variable de tipo string?( Cadena de caracteres), que a su vez ocupa bytes de memoria?, puesto que el sistema tiene que almacenar (Guardar o Guardar espacio) para esta variable para definir posteriormente, (Fraccion de segundos) su valor?
La verdad seoane es simple curiosidad y tratar de aprender algo mas.
Saludos

seoane 29-09-2006 20:41:32

Ahora creo que ya se por donde vas, donde yo pongo:
Código Delphi [-]
  Numero:= '1,25';
  if TextToFloat(PChar(Numero),Valor,fvExtended) then

preguntas por que no uso:
Código Delphi [-]
  if TextToFloat('1,25',Valor,fvExtended) then

Lo hago por seguir el ejemplo que puso elcigarra:
Código Delphi [-]
var
  Numero : string
begin
  if isNAN(StrToFloat(Numero)) then

Con respecto a tu pregunta, la diferencia entre una y otra cosa es insignificante. Estamos hablando de microsegundos.

Caral 29-09-2006 20:47:42

Gracias
La verdad esto es lo que me gusta de este club y sus foros que una pregunta o una duda se puede convertir en un debate y creo que de eso se trata espero que con ampliar estas posibilidades elcigarra y otros muchos tengan mas criterio y enfonquen sus dudas con mas amplitud.
Repito Gracias por tu explicacion he insisto, Maestro.
Saludos

roman 29-09-2006 20:48:48

Cita:

Empezado por seoane
la diferencia entre una y otra cosa es insignificante. Estamos hablando de microsegundos.

Además en muchos casos el compilador de hecho desechará la variable. Y aún si no fuese el caso, yo prefiero "desperdiciar" unos cuantos a bytes y ganar legibilidad de código.

// Saludos

roman 29-09-2006 21:19:00

Cita:

Empezado por seoane
TextToFloat

Por cierto, ¿algúna razón en especial para no usar TryStrToFloat o es sólo un gusto por los PChar? :p

// Saludos

seoane 29-09-2006 21:27:37

Cita:

Empezado por roman
Por cierto, ¿algúna razón en especial para no usar TryStrToFloat o es sólo un gusto por los PChar? :p

// Saludos

:D Ya sabes que los punteros me encantan, pero en este caso lo hice por si la función TryStrToFloat no estaba disponible en esa versión de delphi que el utilizaba.

roman 29-09-2006 21:30:38

Los pchar son a los string lo que los palillos chinos al tenedor. Se pueden hacer maravillas con los primeros pero es mucho, mucho más cómodo usar los segundos.

:D

// Saludos

Caral 29-09-2006 22:13:03

Denuevo:
La pregunta existencial.:D
Si nuestro amigo elcigarra pregunta a mi entender:
Cita:

La pregunta es si existe alguna función que evalúe el texto antes de intentar realizar la operación...
y en el primer parrafo dice en concreto:
Cita:

saber si un texto represanta algún número sin tener que recurrir al control de excepciones
Mi respuesta fue incorreta?,:confused: para anotarla en mi lista de fallos.:mad:
Cita:

En El evento OnKeyPress del edit o dbedit pon:
Código Delphi [-]
if key in ['0'..'9'] then
// Aqui pones lo que necesitas
Puesto que si por limpieza y rapidez de codigo se trata, esto es rapido seguro.:D
Maestros por favor me critican asi aprendo.:D
Saludos

roman 29-09-2006 22:17:37

Son dos cosas distintas. Lo que tú propones sirve para permitir que se tecleen sólamente dígitos dentro de algún control. Pero en la pregunta original no se menciona ningún control en particular; el dato puede provenir de otro tipo de fuentes, por ejemplo, de un archivo de texto.

// Saludos

maeyanes 29-09-2006 22:18:46

En tu caso estás comprobando que un caracter 'X' se encuentre en el rango dado...

Y lo que necesita elcigarra es comprobar si un string dado representa a un número.

Así que no aplicaría... ;)


Saludos...


Actualización: Que me han ganado... :p

mamcx 29-09-2006 22:20:45

Caral, no te preocupes por "gastar memoria" tan pronto.

Usar variables es el metodo recomendado para la mayoria de los casos, y ten en cuenta que los compiladores se optimizan para los casos "genericos".

Cuando alguien hace algo no "generico" el compilador (ejem... los arquitectos del compilador) lo que hace es decir: ok, se supone que el tio es mas listo que yo.

Y la gran mayoria de los casos, no lo son.

Ademas en Delphi Nativo (Win32/Win64) los tipos de datos string son mutables y son punteros, lo que implica que son muuuy eficientes. De hecho, pascal tiene el mejor tipo de datos string, a la hora de balancear asuntos.

Otro caso es sobre .NET y otros lenguajes, que tienen datos inmutables, o sea, cada referencia es una copia de la anterior, no un puntero.

Y aun asi, es negible el efecto.

Las mejores optimizaciones se logran:

- Haciendo codigo claro, que siga las convenciones, y que trabaje de forma "normal" sin pretender ser muy listo antes de serlo de verdad.

- Reducir la cantidad de codigo, la cantidad de funciones, etc... Simple es mejor que complejo.

- El 80% de los problemas esta en el 20% del codigo. El codigo mas repetitivo es el que *vale* la pena chequear para optimizar y refactorizar.

- Antes de optimizar, usa un profiler. La mayoria de los programadores aprendemos tecnicas de optimizaciones (como pasar un for a un while) que son innecesarias en compiladores modernos, o que no corresponden a la arquitectura (ej: Aplicar optimizaciones Win32 a .NET). Solo al usar profilers sabras que es lento.

- La velocidad perceptual es mas importante que la de maquina. Un software que le parezca al usuario mas lento es peor que uno que lo sea tecnicamente mas rapido.

La optimizacion se logra haciendo un buen codigo visual...

Una vez *tu* seas eficiente en desarrollar, preocupate por que lo sea tu software, porque sino terminaras haciendo un trabajo innecesario.

Caral 29-09-2006 22:25:57

Gracias maestros, a todos , puesto que si no se hacen preguntas, ahunque sean tontas, no se aprenderia.
Pd. elcirrara: No sirve mi opcion
Reconozco mi error y les doy las gracias por su enseñanza y paciencia, que en los tres meses que llevo programando he aprendido mucho con vosotros.
Saludos

seoane 29-09-2006 22:29:38

Por otro lado Caral aunque estés usando un TEdit para introducir el numero, y utilizaras el evento OnKeypress para filtrar los números, eso no nos asegura que el resultado pueda ser convertido a un numero. Por ejemplo, el numero 5000000000 pasaría tu filtro, pero no se puede convertir en integer. Por eso siempre es recomendable hacer la comprobación, mas vale 10 comprobaciónes de mas que una de menos :)

Caral 29-09-2006 22:51:43

Maestros
A mi me encanta el debate y por eso me gusta este club, recordad que no soy programador, ni siquiera me acerco, pero a mi edad se llega a saber que para todo existe un porque y si he tenido que aprender a gatear en este el increible delphi, por necesidad, ya que no he encontrado un programador que verdaderamente entendiera las necesidades de mi empresa, es por algo, quien sabe si algun dia cuando sea grande aprenda este lenguage de programacion, lo que se es que el pequeño programa que hice de aprox. 70 froms y que incluso mis clientes hacen sus pedidos via internet funciona gracias a vosotros,-- a donde envio el pago.:D
Saludos maestros por que cada dia estan y siempre dispuestos.
Saludos

jachguate 29-09-2006 23:06:19

Cita:

Empezado por Caral
a donde envio el pago.:D

Puedo enviarte los datos de mi cuenta por correo, o bien, aprovechando que no estamos muy lejos, te recibiré un buen paquete de cervezas por correo.. :D

Saludos.

;)

Caral 29-09-2006 23:12:44

Hola Jashguate
Me parece bien soy poco aficionado a los viajes y cada vez que tengo que ir a algun sitio me enfermo y mando a alguien mas, hace 3 meses envie a mi vendedor a Guatemala, mira por donde de saberlo habria ido yo y nos las tomamos juntos, la proxima vez que tenga que ir por alla te lo digo de hecho estoy en conversaciones con una empresa para vender mi producto por alla, espero se cuaje.
Saludos

Caral 29-09-2006 23:33:25

Lista navideña
Jachguate, Guatemala = paquete de cervezas
Dec y seoane, España = me quedan facil = un buen tintorro, Rioja, Riviera del Duero, Bueno escojeis
Roman, Mexico = Un Buen Tequila, No me acuerdo bien de las marcas, ya que en el DF se desalluna,almuerza y cena con tequila, por lo menos eso hice yo.
Espero no se me haga muy grande la lista.:D :D
Saludos

roman 29-09-2006 23:44:02

Cita:

Empezado por Caral
ya que en el DF se desalluna,almuerza y cena con tequila, por lo menos eso hice yo.

¡Vaya fama que nos haces!

Sólo comemos y cenamos con tequila; en el desayuno bebemos cerveza.

:D :D

// Saludos

jachguate 29-09-2006 23:50:17

pues enhorabuena!

Que tipo de "producto" es el tuyo?

Saludos.

seoane 29-09-2006 23:50:36

Hace solo un par de días que probé el mezcal por primera vez, y fue entonces que me entere que se hacia con la misma planta que el tequila :o

Caral 29-09-2006 23:58:56

Fabrico Spas, Bañeras y articulos en Acrilico y Fibra de vidrio en general.
Aunque mi empresa es pequeña, 25 personas, exporto a Panama, Nicaragua, Republica Dominicana, estoy entrando al Salvador y tratando con Guatemala.
Tal vez habras visto los rotulos de las estaciones de servicio Shell, Bueno estos los fabrico yo para Centro America y Caribe, por medio de otra Empresa.
Bueno por lo menos me mantengo entretenido, ahunque me gusta mas el Club Delphi.
Saludos

jachguate 30-09-2006 00:07:37

Pues yo si que he probado el tequila :eek:

Pero no el mezcal... es que no me hago a la idea de que haya un gusano allí mismo... ¿cual es la idea de eso?

Saludos.

;)

Caral 30-09-2006 00:25:56

Esta parte de un reportage te dice, la clave, es lo afrodisiaco, para algunos, para mi el sabor es como quitarle al queso Roquefrot el moho verde, seria otro queso mas.
Cita:

Se dice que el mejor mezcal es el que tiene por lo menos un gusano añadido a la botella. En países como China lo piden con la adición de 20 gusanos por botella porque creen que posee más fuerza afrodisiaca. El gusano del maguey (Hipopta Agavis) conocido como gusano rojo es una fuente de proteína que también se consume como aperitivo tostado y mezclado con chile picado, creanme una diferente aventura culinaria.
Aun asi prefiero el Tequila, creo Don Juan o Don Pedro, la verdad no me acuerdo, que rasca aquella.
Saldos


La franja horaria es GMT +2. Ahora son las 16:58:46.

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