| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Goyoko Invitado
|
Publicado: Jue 03 Abr, 2003 10:15 pm Asunto: CAmbio de variables AnsiString a Int o Float. |
|
|
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
Christian. |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Jue 03 Abr, 2003 11:34 pm Asunto: jaquemate |
|
|
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 |
|
 |
goyoko Invitado
|
Publicado: Vie 04 Abr, 2003 8:37 pm Asunto: Trozo excepcion.. |
|
|
Hola Jaquemate... aqui te copio la excepcion que me arroja el compilador.
Dice:
"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:
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.
CPB. |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Vie 04 Abr, 2003 11:30 pm Asunto: |
|
|
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 |
|
 |
goyko Invitado
|
Publicado: Lun 07 Abr, 2003 7:14 pm Asunto: Para jaquemate |
|
|
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 |
|
 |
tronxx Invitado
|
Publicado: Lun 07 Abr, 2003 7:33 pm Asunto: Usa el antiguo atof() |
|
|
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 |
|
 |
goyoko Invitado
|
Publicado: Lun 07 Abr, 2003 7:56 pm Asunto: No resulta |
|
|
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 |
|
 |
goyoko Invitado
|
Publicado: Lun 07 Abr, 2003 9:18 pm Asunto: OOppss.. me equivoqué |
|
|
Disculpa Tronxx... me equivoqué.. había probado lo que me dijiste sin el metodo .c_str() ahora probé con eso y funciona super bien.. entrega puros 0 cuando no llega nada .
Gracias por tu ayuda. Me sirvió.  |
|
| Volver arriba |
|
 |
|