Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Sockets-Reconocer una cadena de texto.

¡¡Hola!!:

Quisiera formularles una pregunta:

Yo, actualmente, para que el ServerSocket haga una acción, la pongo como

If Socket.ReceiveText = ' ' Then
begin
end;

y me funciona. Pero la cuestión es que si quiero que mi programa realize una función con el texto recibido, como veo que no me estoy explicando muy bien... pongo un ejemplo

If Socket.ReceiveText = 'MENSAJE Hola!!';

Que me muestre un mensaje diciendo lo que va detrás de MENSAJE, es decir, que separe el texto recibido en dos.

¿Existe alguna función al estilo..

If Socket.ReceiveText = 'MENSAJE' + ¿? Then

o no?, en caso de ser no, ¿cómo puedo hacer lo que quiero?



Gracias de nuevo
__________________
:)
Responder Con Cita
  #2  
Antiguo 30-10-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 21
Descendents Va por buen camino
No se si te he entendido bien, pero entiendo que tu quieres dividir un string en dos.Sabiendo que uno de ellos sera MENSAJE y que ocupa 7 caracteres no?

Supongo que lo quieres para que asi nadie se pueda colarse en tu chat o en tu lo que estes haciendo no?.

Pues haz un if pos ('MENSAJE' en tu string) <> 0 , DELETE(string que quieres,posicion inicial, cuantos caracteres quieres borrar);


Por ejemplo:
var
s:string;
s := 'MENSAJE hola como estas?'

If pos ('MENSAJE',s) <> 0 then
Delete(s,1,7);

S es igual a hola como estas?

Espero que te haya entendido y esto te sirva

Un saludo
Responder Con Cita
  #3  
Antiguo 30-10-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Bien, funciona. El programa que estoy haciendo es un chat, con su servidor y todo eso, y quiero que, al conectarse un usuario, mande:

NICK Pepe

O algo así, y que después, el chat tiene una función de ver el estado anímico:

ESTADO Feliz.

O algo así. Por lo que necesito usar esa función para varias cosas.

El código funciona, pero no se si sería demasiado pedir que me lo comentases, pues así podría aprender más, y no solo resolver la duda. Muchas gracias


De verdad, mil gracias
__________________
:)
Responder Con Cita
  #4  
Antiguo 30-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Otras funciones que te pueden ayudar son Copy y Lenght que las tienes muy bien explicadas en la ayuda de delphi.

Yo en tu caso, no usaria un encabezado de un largo variable, sino algun prefijo de un largo fijo, para poder cortar ese valor y usar un case

__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #5  
Antiguo 31-10-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Es buena la idea, pero no hace lo que quiero, pues si quisiese poner un case y los nick iguales, los podría hacer igualmente con
NICK Pepe, NICK Juan, sin tener que quitarles el nick. Si he abierto este hilo es porque no son predefinidos, sino cualquiera.

Si alguien me pudiese comentar el código de antes, le estaría muy agradecido, pues se que funciona, pero no se el POR QUÉ, que es lo que me interesa, sobre todo, aprender.


Muchas gracias de nuevo
__________________
:)
Responder Con Cita
  #6  
Antiguo 31-10-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 21
Descendents Va por buen camino
Código:
var
s:string;
begin
  s:= 'MENSAJE hola como estas?'
  If pos ('MENSAJE',s) <> 0 then 
  Delete(s,1,7);
s = hola como estas?



if pos -->> busca el primer parametro dentro del segundo.
Es decir Si 'MENSAJE' esta dentro de S.

I el delete -->> te borra del primer parametro(es decir S) desde el segundo paramentro(Es decir 1) hasta el tercer parametro (es decir 7).

O sea te borra de toda el string de 1 al 7 caracteres.

I por cierto ahora que lo pienso,tambien puedes utilizar leftstr();


Ejemplo
Código:
var
s,r:string;
begin
  s:= 'MENSAJE hola como estas?'
  r := (LeftStr(s,7));
  if r = 'MENSAJE'  then   Delete(s,1,7);
end;
s = hola como estas?

Leftstr -->>Se recorre el string empezando por la izquierda, hasta el caracter que tu le indicas

Última edición por Descendents fecha: 31-10-2003 a las 10:23:36.
Responder Con Cita
  #7  
Antiguo 31-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Creo que me explique mal.

La idea de que en el texto de tus mensajes TCS o UDP pases un encabezado indicando que informacion contiene el Msg , si similar a decir que estas diceñando tu propio protocolo sobre TCS.

Lo que yo te decia era que te generes un estandar de encabezados de un largo definido, como por ejemplo

MSG = mensaje
LOG = datos de ingreso
NIK = nick
......

de esa forma puedes hacer una cosa asi :
Código:
  case copy(msg, 1, 3) of
      'MSG':  // codigo para mostrar el msg que esta en copy(msg,4,lenght(msg)-4)
       'LOG': // codigo para loguearse

    .......  etc
espero haber sido algo mas claro.

__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #8  
Antiguo 31-10-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Muxas gracias a los dos!!, voy aprobarlo y os kuento, ok??. Por cierto, Viet, no t explicaste mal, sino que yo soy algo ignorante .

Muxas gracias
volveré con la respuesta
__________________
:)
Responder Con Cita
  #9  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Hola, hoy el vuelto a probar el código, ya que la última vez se me olvidó responder. He usado los dós codigos:

Código Delphi [-]
  r := (LeftStr(s,4));
  if r = 'MNSG'  then
    begin
      Delete(s,1,4);
      ShowMessage (s);
    end;
Este, el de Descendents, que es el que más me gusta de momento (aunque he de reconocer que el otro parece más sencillo, pero me resulta más claro de comprender el de Descendents), me da error en LeftStr, más exactamente me dice:
Cita:
[Error] Unit1.pas(814): Undeclared identifier: 'LeftStr'
Y respecto al segundo código, el del amigo Viet, lo copio tal como me viene, cambiando el msg que aparece al principio por la variable "s" que utilizo en el ejemplo de Descendents:
Código Delphi [-]
case copy(s, 1, 3) of
      'MSG': ShowMessage (s);
El de Viet me interesa un poco menos (aunque reconozoco que está bien) porque no se usar el case poniendo begin's y end's, aunque se para que sirve. Bueno, los errores que me dan son:
Cita:
[Error] Unit1.pas(820): Ordinal type required //Primera linea
[Error] Unit1.pas(821): Incompatible types: 'Integer' and 'String' //Segunda línea
Muchas gracias simplemente, por leerme
__________________
:)
Responder Con Cita
  #10  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Añado que utilizo Delphi 7 Enterprise
__________________
:)
Responder Con Cita
  #11  
Antiguo 14-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

no puedes utilizar un tipo no ordinal (como un string) en un case en Delphi. Tendrás que hacerlo con if.

Otra cosa que podrías hacer seria codificar tus mensajes numéricamente en vez de alfanuméricamente para poderlos convertir a un tipo ordinal y poderlos utilizar en un case. Ejemplo:

000 = mensaje
001 = datos de ingreso
002 = nick

Saludos.
Responder Con Cita
  #12  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Vale, muchas gracias. Por cierto ¿cómo sería con el ejemplo de Descendents?, es que me resulta más fácil usar ese.
__________________
:)
Responder Con Cita
  #13  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
¿Estaría bien entonces...
Código Delphi [-]
  r := copy(s, 1, 4)
  if r = 'MNSG'  then
    begin
      Delete(s,1,4);
      ShowMessage (s);
    end;
?
Responder Con Cita
  #14  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Mejor no sy bago y lo pruebo
Responder Con Cita
  #15  
Antiguo 14-06-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Funciona xD Gracias a todos
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


La franja horaria es GMT +2. Ahora son las 14:21:55.


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