Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como converitr dato del puerto a decimal? (https://www.clubdelphi.com/foros/showthread.php?t=35402)

Estefania 08-09-2006 20:40:33

¿Como converitr dato del puerto a decimal?
 
Hola, necesito que me ayuden a solucionar este problema, tengo un programa que levanta datos desde el puerto com1 y por medio de la siguiente funcion me convierte el dato a un valor string, pero yo kiero convertirlo a decimal en vez de a string, como lo puedo hacer?? aca les dejo el procedimiento que esta funcionando en mi programa, si me escriben la parte de codigo que necesito insertar en este procedimiento me seria de mucha ayuda. Aqui el procedimiento:

Código Delphi [-]
procedure TMainForm.cpDrvReceiveData(Sender: TObject;
 DataPtr: Pointer; DataSize: Cardinal);
var
  i : integer;
  s : string;
begin
  // Convert incoming data into a string
  s := StringOfChar( ' ', DataSize );
  move( DataPtr^, pchar(s)^, DataSize );
  S := Trim(s) + #13 ;
  // Exit if s is empty. This usually occurs when one or more NULL characters
  // (chr(0)) are received.
  while pos( #0, s ) > 0 do
    delete( s, pos( #0, s ), 1 );
  if s = '' then exit;
  // Remove line feeds
  i := pos( #10, s );
  while i <> 0 do
  begin
    delete( s, i, 1 );
    i := pos( #10, s );
  end;
  // Process the buffer line by line. This breaks the buffer block into discreet lines.
  // If you want to act upon individual ID's and data, do it in ProcessReceivedLine routine.
  i := pos( #13, s );
  while i <> 0 do
  begin
    ProcessReceivedLine(Copy(s,1,i)) ; // Process the line
    delete( s, 1, i ); // then delete it.
    i := pos( #13, s );
  end;
end;

Ayuda pro favor!!!:confused: :confused:

jachguate 08-09-2006 21:05:59

A que te referís con "convertirlo a decimal"??

¿a entero? ¿a coma flotante?
¿en que momento?

Si ProcessReceivedLine recibe como parámetro un entero, por ejemplo, podrías cambiar la línea actual por:

Código Delphi [-]
  try
    ProcessReceivedLine(StrToInt(Copy(s, 1, i)));
  except
    on ECovertError do
      ShowMessage('Esta línea se ejecuta si la cadena recibida no es un entero!');
  end;

Hasta luego.

;)

Estefania 08-09-2006 21:14:23

Me equivoque, quiero recibir el dato en valor ENTERO
 
Tenes razon, me exprese mal.... quiero recibir el valor en Entero... ya coloque lo que me recomendaste anteriormente y no me afunciono, quieres te te adjunte el codigo funete de la aplicacion completa asi le hechas el ojo y me ayudas????

Sotrono 08-09-2006 22:24:07

Hola Estefania.
Te tiro algún error con el cambio que te "dijo" jachguate?? Porque deberia funcionar.
Lo que también tenes que cambiar para que te funcione es el tipo de variable que recibe como parámetro la funcion ProcessReceivedLine, ya que antes recibias una cadena de caracteres y ahora un numero entero.

Bytes!!

Por cierto, que equivocado que estaba Arcioneo en este hilo ;)

seoane 08-09-2006 22:34:45

Permiteme un par de preguntas. Lo que recibes por el puerto serie ¿son caracteres?, es decir, si por ejemplo recibes 100 lo que realmente recibes son las letras '1', '0', '0', o por el contrario recibes el byte 100. Si es el primer caso solo tienes que convertir el string en integer tal como te indico jachguate (quizá tengas que quitarle el ultimo carácter el #13 antes de convertirlo), pero si es lo segundo, si los datos se envían como bytes tendríamos que saber cuantos bytes forman cada numero y se tendría que reformar casi todo el procedimiento.

jachguate 08-09-2006 23:11:00

Creo que no hace falta que envíes mas código, basta con que indiques si el error ocurre en tiempo de compilación o de ejecución.

Con respecto de lo dicho por seoane (buen punto!) aclarar que yo asumí que el código anterior trabajaba, pero que quería cambiarse.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 20:58:00.

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