Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

CAmbio de variables AnsiString a Int o Float.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: CAmbio de variables AnsiString a Int o Float. Responder citando

Holas.. soy nuevo en lo que es CBuilder.

Estoy trabajando con una vcl que captura datos del puero COM1 y me deja el dato en AnsiString. Como puedo convertirlo en una variable de tipo int o Float he intentado con StrToFloat ó StrToInt pero no funciona. Compila bien.. pero al capturar el dato.. el programa sufre una exepción en el código y no sigue funcionando.

Además quería enlazar los datos que me llegaran a una pagina web, se puede hacer eso . Alguien sabe como se podría hacer?

De antemano muchas gracias Shocked Embarassed Confused
Christian.
Volver arriba
Mensaje    Asunto: jaquemate Responder citando

Hola, ¿podrías especificar cual es la excepción que te dá? Además, no estaría mal que pusieras el trozo de código donde se supone que está el error.

En cuanto a enlazar los datos a una página web, supongo que te refieres a generar un fichero .html con los datos que van llegando del puerto serie, no? Si es así, puedes usar las funciones de ANSI C como fopen, fread, fwrite, fclose para abrir, leer, escribir y cerrar un fichero respectivamente. También podrías pasar los datos a un registro de una base de datos y que la página web accediera a la base de datos y leyera el registro. Para eso puedes usar PHP o ASP por ejemplo.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Trozo excepcion.. Responder citando

Hola Jaquemate... aqui te copio la excepcion que me arroja el compilador.
Dice: Shocked

"Project TX.exe raised expcetion class EConvertError with message ''' is not a valid floating point vallue'. Process stoped. Use Step or Run to continue."

El código que lo genera es el siguiente: Embarassed

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
float a;

Timer2->Enabled = true;
a = VaComm1->ReadText().ToDouble();
ListBox1->Items->Add(a);
}


Lo que quiero es transforma el dato que me llega del puerto serie en un dato númérico para poder graficar o bien calcular.. y quería mostrar el byte que llegaba pero de 0 a 255.

Muchas gracias por tu ayuda. Laughing

CPB.
Volver arriba
Mensaje    Asunto: Responder citando

Está claro: se produce una excepción ya que no es posible convertir el AnsiString en un valor numérico porque la cadena está vacía. Controlar eso es muy fácil:

Código:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Timer2->Enabled = true;
  AnsiString cadena = VaComm1->ReadText();
  if (!cadena.IsEmpty())
  {
    float a = cadena.ToDouble();
    ListBox1->Items->Add(a);
  }
}


Esto podría funcionar si el método ReadText() devolviera siempre valores numéricos, pero si además devuelve caracteres alfabéticos, volvería a producirse la excepción. Por lo tanto, lo mejor es controlar la excepción de la siguiente forma:

Código:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Timer2->Enabled = true;
  try
  {
    float a = VaComm1->ReadText().ToDouble();
    ListBox1->Items->Add(a);
  }
  catch (EConvertError&)
  {
  }
}


Aunque en el entorno IDE del C++Builder te aparezca el mensaje de error de la excepción, si ejecutas el programa fuera del entorno no aparecerá ningún mensaje de error.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Para jaquemate Responder citando

Holas jaquemate...
hice lo que me dijistes pero el error se sigue presentando. Se sale de todas formas de cuando está funcionando el programa.

Como podría solucionar esto.. estuve leyendo sobre lo que hace el try dice que si no encuentra handler en el catch se cancela la ejecución del programa.. como se puede solucionar esto?

gracias de antemano..
Volver arriba
Mensaje    Asunto: Usa el antiguo atof() Responder citando

Puedes usar el antiguo atof()
double valor = atof( cadena._cstr());

y esto si tiene caracteres alfa corta y devuelve lo que encuentra bien 0 cero si no hay nada
Volver arriba
Mensaje    Asunto: No resulta Responder citando

Gracias tronxx.. probé pero no funciona.. seguramente debe ser porque estoy transformando un AnsiString y atof no lo puede transformar en char...

gracias
Volver arriba
Mensaje    Asunto: OOppss.. me equivoqué Responder citando

Embarassed Disculpa Tronxx... me equivoqué.. había probado lo que me dijiste sin el metodo .c_str() ahora probé con eso y funciona super bien.. Cool entrega puros 0 cuando no llega nada Razz .

Gracias por tu ayuda. Me sirvió. Laughing Laughing Laughing Very Happy Very Happy
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.