Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Conversion de Strings

Hola, Saludos a todos!
MMM... Ya se que en el grupo se ha hablado de este tema de las conversiones pero no he encontrado o no he entendido una respuesta al tema que planteo. Este codigo:

Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntTostr(strtoint(edit1.Text ));
end;



Funciona perfecto si lo que quiero convertir es una cadena de Numeros (1,9,12,456,8900,100000, etc), pero si lo que quiero es convertir en un valor entero una cadena como: C, ST, Hx o similar aparece un mensaje de error que me dice que lo que se ingreso no es un entero valido -creo que es logico- entonces lo que deberia de hacer es obtener su codigo ASCII y he aqui la pregunta ¿Eso como se hace? CHAR solo acepta un caracter, CHR no me acepta el contenido de un string o de un edit1.text ¿que tipo debo usar aqui? El resultado final deberia ser :
1 = 49; 5 = 53; 10 = 49 48; ST = 83 84; Hx = 72 120 y asi segun lo que el usuario ingrese.
Espero haberme dado a entender pero si no avisenme. Gracias por su tiempo y ayuda.


EDITADO:
Encontre este hilo http://www.clubdelphi.com/foros/show...nvertir+string y lo modifique asi:

procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
cadena: string;
total: integer;
c: string;
begin
total := 0;
cadena := 'Bienvenido al ClubDelphi';
for i := 0 to Length(cadena) do
//total := total + Ord(cadena[i]);
c := c + ' ' + IntToStr(Ord(cadena[i]));
//ShowMessage(IntToStr(total));
ShowMessage(c);
end;

y funciona perfectamente como queria. Siguiendo el orden de ideas -no creo que sea para otro hilo- ¿como se podria "ver" un codigo de control? es decir los primeros 31 caracteres de la tabla ASCII.(NUL, SOH, STX, ETX..CR, LF,..US) Gracias nuevamente por la ayuda!

Última edición por FGarcia fecha: 02-08-2006 a las 02:54:58.
Responder Con Cita
  #2  
Antiguo 02-08-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
En verdad que deberías explicar mejor que es lo que quieres. La función es para transformar Enteros a String y la otra de string a entero, que es lo que deseas hacer aparte de eso?

Saludos.
Responder Con Cita
  #3  
Antiguo 02-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Ok, gracias por el interes.
1. Necesito convertir una cadena (string) a su correspondiente valor ASCII y viceversa.
2. La cadena puede estar compuesta de valores numericos (0...infinito) y/o de letras.
3. La longitud de esa cadena por el momento no me interesa restringirla
4. El primer codigo que publique funciona siempre y cuando la cadena sea de solo numeros. Si la cadena esta compuesta por una letra o simbolo genera error. Ej. "C no es un entero valido"
5. el segundo codigo convierte perfectamente a ASCII
6. Falta el regreso de ASCII a String
7. En un momento determinado ¿como evito el mensaje de error mencionado?

esas son mis dudas. Gracias por la ayuda que puedan prestarme
Responder Con Cita
  #4  
Antiguo 02-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Creo que estas intentando encontrar una solución sin comprender como llegar a ella.

Tienes Chr y Ord para traducir una letra a su equivalente Ascii y viceversa.

Si el código ascii de cada letra, lo tienes en una cadena separada por espacios, sólo es cuestión de analizar esa cadena.

Código Delphi [-]
var ascii : string;
     ValorNumerico : integer;
     letraFinal : Char;
begin
  ascii := '105'; // representación de la letra "i" en ascii
  valornumerico := strtoint(ascii); 
  letrafinal := chr(valornumerico);

// o resumiendo:
letrafinal := chr(strtoint(ascii));
end;

PD: El segundo código no funciona bien, ya que el bucle for empieza en cero, y un String siempre empieza en el índice uno. Intentalo con la cadena "Bien" y verás que en el ShowMessage obtienes 5 valores ascii, cuando solo hay 4 letras. Eso demuestra que no has analizado bien el código

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 02-08-2006 a las 14:47:05.
Responder Con Cita
  #5  
Antiguo 02-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Si comprendo bien lo que quieres hacer, que puede que me equivoque, lo que necesitas es a partir de una cadena de texto obtener otra donde cada letra esta identificada por su código ASCII, y luego realizar el proceso contrario. Esto me recuerda bastante al urlencode / urldecode que se utiliza para las direcciones url, donde los caracteres problemáticos se sustituyen por su valor ASCII precedido del símbolo %. Supongo, y estoy adivinando, que tu te encuentras en el mismo caso, necesitas enviar / guardar una cadena por algún método que solo permite un cierto tipo de caracteres y necesitas poder tratar con los caracteres problemáticos.

Si ese es tu caso te recomiendo el truco 62, que hace eso mismo. Aunque si lo que quieres es convertir todos lo caracteres y no utilizar el %, puedes usar algo como esto:

Código Delphi [-]
function Encode(Str: string): string;
var
  i: integer;
begin
  Result:= '';
  for i:= 1 to Length(Str) do
    Result:= Result + IntToHex(Ord(Str[ i ]),2);
end;

function Decode(Str: string): string;
var
  i: integer;
begin
  Result:= '';
  while Length(Str) > 0 do
  begin
      if not TryStrToInt('$' + Copy(Str, 2, 2),i) then
      begin
        Result:= '';
        Exit;
      end;     
      Result:= Result + Char(i);
      Delete(Str, 1, 2);   
  end;
end;

Última edición por seoane fecha: 02-08-2006 a las 16:18:58.
Responder Con Cita
  #6  
Antiguo 02-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Nuevamente aqui!

Lepe: En el segunco codigo si detecte lo del caracter de mas que siempres es 0; no corregi cuando envie el mensaje. El codigo que me propones es con el que comence antes de poner este hilo tu le das el valor a la variable ascii = '105' y lo traduce correctamente en la letra i si le das '67' te escribe C, pero eso es lo que tu y yo sabemos que esas son sus equivalencias, un operario estandar solo veria que debe ingresar CASA y el programa hace todo (conversion y lo que tenga que hacer) transparente a el, si intentas que ASCII := 'CASA' se genera un error:

---------------------------
Project1
---------------------------
'C' is not a valid integer value.
---------------------------
Aceptar
---------------------------

y asi comenzo todo....

SEOANE : estas correcto, necesito guardar una cadena en sus valores ASCII o HEX como lo propones. La funcion ENCODE me funciona OK, la DECODE me regresa solo garabatos, estoy revisando para tratar de entender que pasa. Algo valioso es que conoci una nueva sentencia "TryStrToInt".

LEPE, SEOANE Gracias nuevamente por su ayuda y tiempo!
Responder Con Cita
  #7  
Antiguo 02-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Efectivamente la función decode no va, eso pasa por poner las cosas con prisa.

Ahora si que funciona:
Código Delphi [-]
function Decode(Str: string): string;
var
  i: integer;
begin
  Result:= '';
  while Length(Str) > 0 do
  begin
      if not TryStrToInt('$' + Copy(Str, 1, 2),i) then
      begin
        Result:= '';
        Exit;
      end;
      Result:= Result + Char(i);
      Delete(Str, 1, 2);
  end;
end;

Para probarla:
Código Delphi [-]
var
  s: string;
begin
  s:= Encode('Hola mundo');
  ShowMessage(s);
  s:= Decode(s);
  ShowMessage(s);
end;
Responder Con Cita
  #8  
Antiguo 02-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
También te recomiendo el truco 53, que además de convertir el texto lo cifra.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
showmessage y strings Elfoscuro Varios 1 19-04-2005 20:00:03
Problema con Strings chivofbv Varios 6 10-11-2004 17:00:53
Alinear Strings rjsitruiz Varios 12 13-07-2004 09:20:16
Copiar Strings mauro Varios 3 04-12-2003 21:22:48
Búsqueda de strings Descendents Varios 1 19-11-2003 19:41:22


La franja horaria es GMT +2. Ahora son las 06:51:34.


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