FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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
__________________
:) |
#2
|
|||
|
|||
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 |
#3
|
||||
|
||||
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
__________________
:) |
#4
|
|||
|
|||
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" ;) |
#5
|
||||
|
||||
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
__________________
:) |
#6
|
|||
|
|||
Código:
var s:string; begin s:= 'MENSAJE hola como estas?' If pos ('MENSAJE',s) <> 0 then Delete(s,1,7); 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; 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. |
#7
|
|||
|
|||
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
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#8
|
||||
|
||||
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
__________________
:) |
#9
|
||||
|
||||
Hola, hoy el vuelto a probar el código, ya que la última vez se me olvidó responder. He usado los dós codigos:
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:
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:
__________________
:) |
#10
|
||||
|
||||
Añado que utilizo Delphi 7 Enterprise
__________________
:) |
#11
|
||||
|
||||
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. |
#12
|
||||
|
||||
Vale, muchas gracias. Por cierto ¿cómo sería con el ejemplo de Descendents?, es que me resulta más fácil usar ese.
__________________
:) |
#14
|
||||
|
||||
Mejor no sy bago y lo pruebo
|
#15
|
||||
|
||||
Funciona xD Gracias a todos
|
|
|
|