Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
¿Interpreto mal TryStrToInt?

Estoy leyendo un fichero XML de recibos domiciliados. En un de los nodos está el número de recibos que se uncluyen en el fichero:
Cita:
<NbOfTxs>15</NbOfTxs>
y para leerlo hago esto:
Código:
iNode3 = iNode2->ChildNodes->FindNode("NbOfTxs");
if (iNode3 == NULL || !TryStrToInt(iNode3->Text, fForBln->Barra->MaxValue))
     continue;
El contenido del nodo, si ejecuto el cóidigo con el depurador, es el que he puesto arriba. No sé si es que estoy interpretando mal cómo trabaja TryStrToInt, pero aunque el nodo leído es el anterior al ejecutarse ese if el valor que me devuelve en MaxValue es 26 y no 15, valor que sí asigna si hago esto:
Código:
fForBln->Barra->MaxValue = StrToInt(iNode3->Text);
Barra es un TProgressBar que hay en otro formulario.
Responder Con Cita
  #2  
Antiguo 21-02-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si he entendido bien sobra el '!', ya que devuelve true o false si ha podido, o no, convertir el texto en integer.
Cita:
TryStrToInt converts the string S, which represents an integer-type number in either decimal or hexadecimal notation, into a number, which is assigned to Value. If S does not represent a valid number, TryStrToInt returns False; otherwise TryStrToInt returns True.
Responder Con Cita
  #3  
Antiguo 21-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Yo creo que no sobra porque además de hacer la conversión hay que evaluar si se ha hecho. Es parecido, entiendo yo, a StrToIntDef:
Código:
if (iNode3 == NULL || StrToIntDef(iNode3->Text, 0) < 1)
     continue;
Al menos lo entiendo así. Lo que me hace falta es que si no hace la conversión no siga ejecutando el resto del código.
Responder Con Cita
  #4  
Antiguo 21-02-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ponlo entre paréntesis (!StrToIntDef(iNode3->Text, 0)), o prueba solo por separado cada comparación para comprobar qué falla.
Responder Con Cita
  #5  
Antiguo 21-02-2022
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ten en cuenta que el entero que pasas es una referencia por lo que al intentar con propiedades de componentes VCL tendrás problemas de asignación. Una una variable de tipo int intermedia.
Código:
bool __fastcall TryStrToInt(const System::UnicodeString S,  int &Value);



Saludos.
Responder Con Cita
  #6  
Antiguo 22-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Ten en cuenta que el entero que pasas es una referencia por lo que al intentar con propiedades de componentes VCL tendrás problemas de asignación. Una una variable de tipo int intermedia.
Efectivamente esa es la solución. Gracias a los dos por la ayuda.
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


La franja horaria es GMT +2. Ahora son las 17:54:14.


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