Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tipo de Dato (https://www.clubdelphi.com/foros/showthread.php?t=51208)

BetoAlonso 08-12-2007 18:38:03

Tipo de Dato
 
Saludos a todos

Alguien seria tan amable por favor de decirme que tipo de dato es esto : #1,#2...#9 y como pasarlo a string.

muchas gracias por su atencion.

:confused:

Lepe 08-12-2007 18:57:46

Son caracteres de control (toda aquella tecla con código ASCII < 32). El #9 es la tecla retroceso, el resto no sé, pero busca un mapa de caracteres o Asciimap en internet.

Saludos

BetoAlonso 08-12-2007 19:24:14

los datos ke te comento son el resultado de la siguiente sentencia :

Código:

C := ApdComPort1.GetChar;

jachguate 08-12-2007 19:44:15

Lo que ves es una convención de delphi... existente desde Turbo Pascal.

Dado que en el código ASCII hay caracteres no imprimibles (todos los menores a 32), a los creadores de Pascal se les ocurrió que cuando estas programando/depurando es necesario distinguir entre esos caracteres.

Cómo ya ha mencionado Lepe, estos caracteres son utilizados a menudo cómo códigos de control (por ejemplo, por editores de texto o por impresoras)

En lugar de mostrarte "muñequitos" o cosas raras... te muestran el código ascii del caracter representado precedido por el signo de numeral.

Así, #1 es equivalente a chr(1), #9 a chr(9) (tabuldador), y cuando programas podes hacer algo cómo:

Código Delphi [-]
  Memo1.Add('Columna1'#9'Columna2');
  Memo1.Add('Dato1'#9'Dato2');
  Memo2.Text := 'Línea1'#13'Línea2'#13'Línea3';

#13 = CR = Carriage return
#10 = LF = Line Feed

Cómo ves.. ya son caracteres que usualmente pertenecerán a un string.

En el caso de la función que estas usando, significa que por el puerto has recibido ese caracter.

Hasta luego.

;)

BetoAlonso 08-12-2007 20:00:26

gracias JAchguate por tu respuesta.

te pongo el codigo ke tengo :

Código:


        C := ApdComPort1.GetChar;
        case C of
        #0:S := S + '0';
        #1:S := S + '1';
        #2:S := S + '2';
        #3:S := S + '3';
        #4:S := S + '4';
        #5:S := S + '5';
        #6:S := S + '6';
        #7:S := S + '7';
        #8:S := S + '8';
        #9:S := S + '9';
        end;

Hasta aki todo bien mi problema es ke C puede llegar a ser #99 y te imaginas hacer un case hasta #99?

Lo ke deseo es saber si hay alguna manera de transformar el valor de C por ejemplo #6 ke sea solo 6.

espero haberme hecho entender.

jachguate 08-12-2007 20:06:25

Código Delphi [-]
  C := ApdComPort1.GetChar;
  S := S + IntToStr(Ord(C));

Claro que si C se convertirá en cadenas de 1, 2 o hasta 3 caracteres... luego no vas a tener forma de distinguir, en la cadena, la organización de la misma.

Es decir, si recibimos la secuencia #1#14#99#103

S terminará teniendo el valor '11499103'

pero no sabremos cómo se formó esa cadena:

¿#1#1#4#9#9#1#0#3?
¿#11#49#91#0#3?
¿#11#4#99#10#3?

¡Es imposible saberlo!

Hasta luego.

;)

BetoAlonso 08-12-2007 20:19:43

Interesante asi ke Ord me devuelve la parte numerica?
estoy recibiendo el cronometro de un tarifador
gracias

jachguate 08-12-2007 20:30:38

Cita:

Empezado por BetoAlonso (Mensaje 251399)
Interesante asi ke Ord me devuelve la parte numerica?

Según recuerdo, Ord te devuelve la posición del valor que tiene la variable dentro de un tipo enumerado, donde el primer valor del tipo tiene índice 0.

Pudimos también usar un molde de tipo:

Código Delphi [-]
  C := ApdComPort1.GetChar;
  S := S + IntToStr(Byte(C));

El resultado, cómo podrías comprobar, es el mismo.

Cita:

Empezado por BetoAlonso (Mensaje 251399)
estoy recibiendo el cronometro de un tarifador

Pues tené en cuenta lo que ya te había dicho.

Para mí, sin saber para lo que vas a usar este dato, tiene mas sentido ir almacenando directamente el caracter obtenido:

Código Delphi [-]
C := ApdComPort1.GetChar;
S := S + C;

Para poder interpretarlo luego... cuando haga falta.

Hasta luego.

;)

BetoAlonso 08-12-2007 21:11:08

lo estuve haciendo asi desde hace 2 semanas
Código:

C := ApdComPort1.GetChar;
S := S + C;

pero cuando la muestro me pinta esto :

Código:


ojo 2 semanas

jachguate 08-12-2007 22:03:20

ah... claro.. es que si la cadena es para mostrarla al usuario... ya hemos dicho antes que son caracteres no imprimibles... es decir: sin representación visual.

Por lo que veo... ahora vas por mejor camino.. :D

Hasta luego.

;)

BetoAlonso 08-12-2007 23:54:13

Si me sirvio de mucho tu ayuda.

Un ultimo favor, tengo la siguiente cadena :
Código:

800000
cual seria la manera de llevarlo a esto :
Código:

00:00:08
:)

jachguate 09-12-2007 00:30:01

Buscá la ayuda de la función Copy

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 02:16:47.

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