Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   eliminar caracteres especiales (https://www.clubdelphi.com/foros/showthread.php?t=15987)

chivofbv 11-11-2004 14:15:48

eliminar caracteres especiales
 
como puedo quitarle a una cadena los caracteres especiales?

diegofhernando 11-11-2004 14:28:46

A q te refieres con caracteres especiales... podrias especificar un poco mas...

chivofbv 11-11-2004 15:23:14

lo que pasa es que estoy insertando esa cadena en una base de datos y al final de lo insertado me esta colocando un cuadrado que no he podido eliminar ni con trim, leftstr, etc. estoy trabajando con SQLQuery de DBExpress com MS SQL.

Lepe 11-11-2004 15:56:53

const saltocarro = #13;
const avancelinea = #10;
const saltolinea = #13#10;

no sé si el delphi que tienes instalado tendrá la rutina ReplaceStr que te sirve para ese propósito.

Si usas las RxLibs, en la unidad NkStrs viene rutinas para el tratamiento de campos memo, algunas rutinas quitan los caracteres especiales.

alguna de las constantes esas puede ser el cuadrado que te pone, si no lo es, será un codigo ASCII menor de 31 (codigos de control),

Intenta copiar y pegar el cuadradito ese en un Edit que tenga en el evento OnChange el codigo ... showmessage(inttostr(edit1.texto[1])) para saber que código es.

Tambien puede que no esté bien configurada la tabla de códigos para el idioma, el dialecto o similar.....

Saludos

Wbarrantes 03-06-2011 00:48:51

reviviendo el hilo
 
tengo una cadena que quiero que quite todo los caracteres especiales como (,?/%"^¨... etc... existe alguna funcion especifica para hacerlo?

ecfisa 03-06-2011 01:32:08

Hola Wbarrantes.
Cita:

existe alguna funcion especifica para hacerlo?
No conozco (no quiere decir que no haya), pero es muy secillo hacerte una que lo haga:
Código Delphi [-]
function QuitarEspeciales(const Cad: string): string;
const
  VALIDOS=[' ','0'..'9','A'..'Z','a'..'z','á','é','í','ó','ú'];
var
  i: Integer;
begin
  Result:= '';
  for i:= 1 to Length(Cad) do
   if Cad[i] in VALIDOS then Result:= Result+Cad[i]
end;

Ejemplos de llamada:
Código Delphi [-]
var
  st: string;
begin
   howMessage(QuitarEspeciales('Me costó $100,| #%en& el c#omercio')); // muestra: 'Me costó 100 en el comercio'
   st:= QuitarEspeciales('Me costó $100,| #%en& el c#omercio');
   ...

Podés agregar o eliminar caracteres a considerar como válidos en la constante VALIDOS.

Saludos.

Wbarrantes 04-06-2011 00:18:10

Grasias Ecfisa, ya tengo un procedimiento que realiza la limpieza...

Código Delphi [-]
begin
Largo:= Length (texto)+1 ;
contador:=1;
  while contadordo
  begin
    valor := Ord(texto[contador]);
    if (valor>LimiteInferior) and (Valorthen
      begin
        TextoLimpio:= TextoLimpio+ texto[contador];
      end  ;
    if Valor=39 then
      begin
        TextoLimpio:= TextoLimpio+' ';
      end;
    contador:=contador+1;
  end;
 Limpiar:= TextoLimpio;
end;
en este caso por medio del codigo Ascii y con unas variantes...
pero si me interesa saber especificamente si existe algun procedimiento de Delphi como tal.... como el Uppercase y funciones similares...

igual agradesco mucho tu aporte...

radenf 20-01-2013 13:47:14

Código Delphi [-]
function QuitarEspeciales(const Cad: string): string;
const
  VALIDOS=[' ','0'..'9','A'..'Z','a'..'z','á','é','í','ó','ú'];
var
  i: Integer;
begin
  Result:= '';
  for i:= 1 to Length(Cad) do
   if Cad[i] in VALIDOS then Result:= Result+Cad[i]
end;

Estimado ecfisa :

Quisera saber como se podría en esta función reemplazar el carácter eliminado por un espacio.
Saludos y gracias

Al González 20-01-2013 20:07:49

Cita:

Empezado por radenf (Mensaje 453736)
Quisera saber como se podría en esta función reemplazar el carácter eliminado por un espacio.

Desconozco si será la mejor opción en tu cso, pero puedes hacerlo con una función como la siguiente. Esta sustituye los caracteres que le indiques por otro en particular:
Código Delphi [-]
  Function ghReplace (Const Value :String; Const Chrs :TSysCharSet;
    Const NewChr :Char) :String;
  Var
    I :Integer;
  Begin
    Result := Value;

    For I := 1 To Length (Result) Do
      If Result [i] In Chrs Then
        Result [i] := NewChr;
  End;

Ejemplo de llamada:
Código Delphi [-]
String2 := ghReplace (String1, [#0..#31], ' ');
La sentencia anterior obtiene una cadena (String2) a partir de otra (String1), reemplazando todos los caracteres ASCII "invisibles" por un espacio. Y claro está, puedes usar la misma variable String para guardar el resultado:
Código Delphi [-]
S := ghReplace (S, [#0..#31], ' ');

O, como cualquier otra función, pasar su resultado directamente a otra rutina:
Código Delphi [-]
Objeto.HacerAlgoCon (ghReplace (S, [#0..#31], ' '), True);

El tipo TSysCharSet (conjunto de caracteres) es de la unidad estándar SysUtils .

radenf 21-01-2013 11:02:51

Muchas gracias [Al Gonzalez].
Esta función la necesito para mejorar el aspecto visual de varios grids que reciben información de servidores, cuyos datos no siempre son ingresados adecuadamente.
La probaré y te cuento.
Saludos


La franja horaria es GMT +2. Ahora son las 08:18:12.

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