FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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:
Y aquí pego el lugar donde lo llamo:
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 |
#2
|
|||
|
|||
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; |
#3
|
||||
|
||||
¡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. |
#4
|
||||
|
||||
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 : 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.
__________________
:) |
#5
|
||||
|
||||
Cita:
// Saludos |
#7
|
||||
|
||||
Cita:
justo antes de un paréntesis y despues pulsar la combinación CTRL+ ALT+ <cursor derecha> para que te diga cual es el paréntesis coincidente, tus ojos te lo agradecerán . Saludos |
#8
|
||||
|
||||
A proposito, ya va siendo tiempo en estudiar un poco las expresiones regulares. Este tipo de código se va agrandando demasiado, y con tres lineas de expresiones regulares se hace practicamente cualquier tarea de parsing de texto. Una buena biblioteca es http://www.regexlib.com/
__________________
El malabarista. |
#9
|
||||
|
||||
#10
|
||||
|
||||
Cita:
Pensé que el enlace que pones era una biblioteca de expresiones regulares pero veo que es literalmente una biblioteca de expresiones regulares. ¿Conoces una buena implementación para Delphi? // Saludos |
#11
|
||||
|
||||
Cierto. Lo que pasa es que el tipo de programa (Telnet) y CUALQUIERA de la categoria Servidor Web (Paginas Web, Servicios Web, Generadores de Html, Ftps, etc...) que en ultimas, siempre manipulan cadenas de caracteres por todos lados se va volviendo un spaguetti de varias funciones de estas... En especial porque no hay que olvidar la proteccion contra injecciones de codigo de toda clase y cosas por el estilo.
Para Delphi si es la parte .NET, este provee unas librerias excelentes. Tambien en las de DevExpress y las de TurboPower hay asi como otras que se consiguen. Por el momento, tengo experiencia es con las de :NET que es donde me ha tocado mascar y tragar expresiones regulares.... Cita:
__________________
El malabarista. |
#12
|
||||
|
||||
Cita:
Siempre me decepcionó que Delphi no implementara un buen motor de expresiones regulares. Cita:
// Saludos |
#13
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#14
|
||||
|
||||
Muchísimas Gracias a todos.. funciona perfectamente y además he conseguido aprender algo más. Muchas gracias de nuevo.
__________________
:) |
|
|
|