Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 21/02/2022
Angel.Matilla's Avatar
Angel.Matilla Angel.Matilla is offline
Miembro
 
Join Date: Jan 2007
Location: Toledo - España
Posts: 1,418
Poder: 21
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:
Quote:
<NbOfTxs>15</NbOfTxs>
y para leerlo hago esto:
Code:
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:
Code:
fForBln->Barra->MaxValue = StrToInt(iNode3->Text);
Barra es un TProgressBar que hay en otro formulario.
Reply With Quote
  #2  
Old 21/02/2022
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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.
Quote:
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.
Reply With Quote
  #3  
Old 21/02/2022
Angel.Matilla's Avatar
Angel.Matilla Angel.Matilla is offline
Miembro
 
Join Date: Jan 2007
Location: Toledo - España
Posts: 1,418
Poder: 21
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:
Code:
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.
Reply With Quote
  #4  
Old 21/02/2022
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Ponlo entre paréntesis (!StrToIntDef(iNode3->Text, 0)), o prueba solo por separado cada comparación para comprobar qué falla.
Reply With Quote
  #5  
Old 21/02/2022
escafandra's Avatar
[escafandra] escafandra is offline
Miembro Premium
 
Join Date: Nov 2007
Posts: 2,211
Poder: 22
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.
Code:
bool __fastcall TryStrToInt(const System::UnicodeString S,  int &Value);



Saludos.
Reply With Quote
  #6  
Old 22/02/2022
Angel.Matilla's Avatar
Angel.Matilla Angel.Matilla is offline
Miembro
 
Join Date: Jan 2007
Location: Toledo - España
Posts: 1,418
Poder: 21
Angel.Matilla Va por buen camino
Quote:
Originally Posted by escafandra View Post
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.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 14:03.


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
Copyright 1996-2007 Club Delphi