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 03-02-2010
Alejo15x Alejo15x is offline
Miembro
 
Registrado: ene 2010
Posts: 55
Poder: 15
Alejo15x Va por buen camino
Descomponer cadena @String

Hola.

Estoy desarrollando algo asi como un bot, bueno...

Tengo un ListBox, en el cual al dar a un boton se agrega los siguientes parametros:

Código Delphi [-]
a.Items.Add('Ground: ('+IntToStr(TPlayer.Create.Position.X)+' '+IntToStr(TPlayer.Create.Position.Y)+' '+IntToStr(TPlayer.Create.Position.Z)+')');


TPlayer es una class la cual lee un entero de una aplicaciòn.
El resultado seria por ejemplo:

Código Delphi [-]
Ground: (32000 32000 7)


Hay tengo los 3 parametros, ahora nesecito acceder a ellos:
Código Delphi [-]
var X, Y, Z : integer; sTipo : string; begin

Escribirle al sTipo donde esta el "Ground", al X, Y, Z, a dentro de los parentesis (X Y Z).

Código Delphi [-]
sTipo (X Y Z)


Bueno, creo que se podria usar un "case" o algo para verificar si "Ground" es ground, y despues escribir en X, Y, Z las X, Y, Z obtenidas en la cadena.

Aquì os dejo un ejemplo en LUA, para que me entiendan mejor. ( Quiero explicar que tengo TDAH alto, y la verdad por eso seme dificulta un monton explicarme, pero si entiendo la programacion ).

Código:
DecodeParam(ListBox.Items[i])
ListBox.Selected.ToString().Split (sTipo (lb1), X (lb2), Y (lb3), Z (lb4))if sTipo = "Groung" then Client.Escribir(X @X, Y @Y, Z @Y) End
Un saludote! Y espero me resuelvan la dudita!
Responder Con Cita
  #2  
Antiguo 03-02-2010
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo entender que tu problema es recibir una cadena y averiguar cuales son los tres valores, separados por espacios.

Código Delphi [-]
procedure RecibeDato(aDato : string)
var
   Posicion : integer;
   sAux : string;
   sTipo : string;
   x,y,x : integer;
begin
   sAux := aDato;  //Trabajo con un auxiliar por si necesito aDato mas adelante en el procedimiento

   Posicion := Pos ('(',sAux); // Busco la posicion del parentesis
   sTipo := copy (sAux,1,Posicion); //copia desde el principio hasta x caracteres
   sAux := copy (sAux,Posicio+1,Length(sAux)) // obtengo el resto del dato

   Posicion := Pos (' ',sAux); // Busco la posicion del primer espacio
   x := StrToInt( copy (sAux,1,Posicion) );
   sAux := copy (sAux,Posicio+1,Length(sAux)) // obtengo el resto del dato

   Posicion := Pos (' ',sAux); // Busco la posicion del primer espacio
   y := StrToInt( copy (sAux,1,Posicion) );
   sAux := copy (sAux,Posicio+1,Length(sAux)) // obtengo el resto del dato

   Posicion := Pos (')',sAux); // Busco la posicion del parentesis que cierra
   z := StrToInt( copy (sAux,1,Posicion) );
   sAux := copy (sAux,Posicio+1,Length(sAux)) // obtengo el resto del dato

   [...]
end;
Responder Con Cita
  #3  
Antiguo 03-02-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Vas a terminar en un gran case, donde vas a necesitar interpretar primero cual es el método, a partir de allí sabes cuantos parámetros puedes recibir y debes hacer un split de sus parámetros y terminar ejecutando tu código según ellos, si falta o sobra uno producir un error.
Para hacer un Split, te recomiendo ver: ParseText, o leer la ayuda de la propiedad CommaText de la case TStrings, o la función ExtractStrings.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 04-02-2010
Alejo15x Alejo15x is offline
Miembro
 
Registrado: ene 2010
Posts: 55
Poder: 15
Alejo15x Va por buen camino
Resuelto!

Gracias al duilioisola ese tambien funciona!
Pero este es mas facil:

function MySplit(source : string; delimiter : string): TStringList;
var i : integer;
s : string;
arrString: TStringList;
begin
arrString := TStringList.Create;
s := '';
i := 1;
repeat
begin
if Copy(source,i,Length(delimiter)) <> delimiter then
begin
s := s + Copy(source,i,1);
i := i + 1;
end
else
begin
arrString.Add(s);
s := '';
i := i + Length(delimiter);
end;
end
until i > Length(source);
if s <> '' then arrString.Add(s);
result := arrString;
end;

Código Delphi [-]
var
  arrWaypoint: TStringList;
  sList,Waypoint,sMode: string;
  posX,posY,posZ: string;
begin
  Waypoint := "Ground (1000 1450 7)"; 
 
  arrWaypoint := MySplit(Waypoint," ");
 
  sMode:= arrWaypoint.Strings[0]; // Returns "Ground"
 
  arrWaypoint := MySplit(Waypoint, "("); // These two lines are removing the brackets and "Ground" ...
  arrWaypoint := MySplit(arrWaypoint.Strings[1], ")"); // Only leaving "1000 1450 7"
 
  sList := arrWaypoint.Strings[0]; // = "1000 1450 7"
 
  arrWaypoint := MySplit(sList , " ");
 
  posX := arrWaypoint.Strings[0]; // 1000
  posY := arrWaypoint.Strings[1]; // 1450
  posZ := arrWaypoint.Strings[2]; // 7
end;
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
Descomponer nombre y apellidos lgarcia SQL 4 15-04-2009 22:16:37
Comprobar cadena dentro de un string Khronos Varios 2 03-07-2008 11:06:35
string de un dbedit a entero para guardar la cadena Nereida Varios 3 06-05-2008 15:59:34
Comparar una cadena String con un directorio dicatek Internet 2 22-03-2008 20:01:05
Descomponer un numero con 7 digitos Camilo Varios 3 05-11-2007 21:58:02


La franja horaria es GMT +2. Ahora son las 04:52:44.


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