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 29-11-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
Buscar en una string todo lo que no sean caracteres A-Z y numeros 0-9

Buenas, estoy intentando hacer un servicio telnet para practicar (quiero asegurarme de que se hacer lo pequeñito antes de hacer un proyecto algo más grande que tengo en mente) y me he quedado pillado en una parte..

He construido una función para evaluarme si una cadena contiene carácteres que no sean de los rangos: [A-Z], [a-z] y [0-9]... y si contiene uno de esos carácteres.. vuelve a pedir al usuario la entrada de datos... Pego ambos códigos:

Código Delphi [-]
function EvaluaCaracteres (Nombre:String):boolean;
var
  I:integer;
begin
  Result := True;
  for I := 0 to Length(Nombre) do
  begin
    If (UpperCase(Nombre[i]) <> 'A') and (UpperCase(Nombre[i]) <> 'B') and (UpperCase(Nombre[i]) <> 'C') 
and (UpperCase(Nombre[i]) <> 'D') and (UpperCase(Nombre[i]) <> 'E') and (UpperCase(Nombre[i]) <> 'F') and
 (UpperCase(Nombre[i]) <> 'G') and  (UpperCase(Nombre[i]) <> 'H') and  (UpperCase(Nombre[i]) <> 'I') 
and  (UpperCase(Nombre[i]) <> 'J') and  (UpperCase(Nombre[i]) <> 'K') and  (UpperCase(Nombre[i]) <> 'L') and  
(UpperCase(Nombre[i]) <> 'M') and
    (UpperCase(Nombre[i]) <> 'N') and  (UpperCase(Nombre[i]) <> 'Ñ') and  (UpperCase(Nombre[i]) <> 'O') 
and  (UpperCase(Nombre[i]) <> 'P') and  (UpperCase(Nombre[i]) <> 'Q') and  (UpperCase(Nombre[i]) <> 'R') and  
(UpperCase(Nombre[i]) <> 'S') and  (UpperCase(Nombre[i]) <> 'T') and  (UpperCase(Nombre[i]) <> 'U') 
and  (UpperCase(Nombre[i]) <> 'V') and (UpperCase(Nombre[i]) <> 'W') and  (UpperCase(Nombre[i]) <> 'X') 
and  (UpperCase(Nombre[i]) <> 'Y') and  (UpperCase(Nombre[i]) <> 'Z') and

    (UpperCase(Nombre[i]) <> '0') and  (UpperCase(Nombre[i]) <> '1') and  (UpperCase(Nombre[i]) <> '2') 
and  (UpperCase(Nombre[i]) <> '3') and  (UpperCase(Nombre[i]) <> '4') and  (UpperCase(Nombre[i]) <> '5') and  
(UpperCase(Nombre[i]) <> '6') and  (UpperCase(Nombre[i]) <> '7') and  (UpperCase(Nombre[i]) <> '8') 
and  (UpperCase(Nombre[i]) <> '9') Then
    begin
      Result := False;
    end;
  end;
end;

Y aquí pego el lugar donde lo llamo:

Código Delphi [-]
procedure TForm1.IdTelnetServer1Connect(AThread: TIdPeerThread);
var
  Mensaje,Nombre:WideString;
  Archivo:TStringList;
//  Aceptado :boolean;
begin
 (...)
  repeat
    AThread.Connection.WriteLn('');
    AThread.Connection.WriteLn('Escriba su nombre:');
    Nombre := AThread.Connection.ReadLn();
    if EvaluaCaracteres(Nombre) = False Then
    begin
      AThread.Connection.WriteLn('El nombre contiene caracteres no validos');
      Aceptado := False;
    end
    Else
    begin
      Aceptado := True;
    end
  until Aceptado = True; 
(...)

Muchísimas gracias
__________________
:)

Última edición por DarkByte fecha: 30-11-2004 a las 07:51:29. Razón: El post pasaba varias veces el ancho del monitor
Responder Con Cita
  #2  
Antiguo 30-11-2004
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 22
Julià T. Va por buen camino
Una manera podria ser esta
Código:
function EvaluaCaracteres (Nombre:String):boolean;
var
  I:integer;
begin
  Result := False;
  for I := 0 to Length(Nombre) do
    If not( (Nombre[i]) in [0..9]) or (Nombre[i]) in ['a'..'z']) or (Nombre[i]) in ['A'..'Z']))  then exit;
      Result := True;
end;
Responder Con Cita
  #3  
Antiguo 30-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Recórcholis!

Nicolas Wirth se revolvería en su tumba si viera este código
y si aún no ha muerto y lo viera moriría de un infarto.

No te caería mal un repaso a los tipos de datos de Pascal, y
digo Pascal y no Delphi porque desde que Nicolas Wirth lo inventó
introdujo el tipo ordinal y el tipo conjunto.

// Saludos

pd: El mensaje sigue abarcando varias patallas horizontales.
Responder Con Cita
  #4  
Antiguo 30-11-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
Julia, he intentado el código que me has proporcionado.. (cambiando el valor de regreso a False si contiene carácteres fuera del rengo)

[delphi]
function EvaluaCaracteres (Nombre:String):boolean;
var
I:integer;
begin
Result := True;
for I := 0 to Length(Nombre) do
If not( (Nombre[i]) in ['0'..'9']) or (Nombre[i]) in ['a'..'z']) or (Nombre[i]) in ['A'..'Z'])) then
begin
Result := False;
end;
end;
end;[delphi]
He tenido que cambiar [0..9] por ['0'..'9'] porque el delphi me daba incompatibilidad de tipos entre Char e Integer.

Luego, en :
Código Delphi [-]
(Nombre[i]) in ['a'..'z'])
Tengo un error en el in que me salta con un error:
"Operator not applicable to this operand type", y al finalizar la misma línea, me da un error:
"'THEN' expected but ')' found".

Roman, yo sabía que se podía hacer así... lo que pasa es que no recordaba como.. y aunque fuese algo bruto... mi falta de lucidez mental de condujeron a ese basto método.
__________________
:)
Responder Con Cita
  #5  
Antiguo 30-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por DarkByte
Luego, en :
Código Delphi [-]
(Nombre[i]) in ['a'..'z'])
Tengo un error en el in que me salta con un error:
"Operator not applicable to this operand type", y al finalizar la misma línea, me da un error:
"'THEN' expected but ')' found".
El código de Julià T. (que no Julia) es en esencia correcto, sólo que están mal colocados algunos paréntesis. Chécalos.

// Saludos
Responder Con Cita
  #6  
Antiguo 30-11-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
¿esto no seria lo mismo?

Código Delphi [-]
   Nombre[i] in ['0'..'9','a'..'z','A'..'Z']

Saludos
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 09:49:58.


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