Eliminar los «saltos de línea» de un TStrings

A veces es interesante poder acceder al contenido de un TStrings (de un TMemo, por ejemplo) como un único string o cadena.
Para eso, Delphi ha dotado a la clase TStrings del método Text, que devuelve el contenido del TStrings como una cadena simple. El inconveniente, es que dentro del resultado van incluídos los caractreres de «Salto de línea» y «Retorno de carro». ¿Cómo eliminarlos?

Con ésta sencilla función se pueden eliminar y/o susituir por otro caracter (espacio,…).

{:Elimina los saltos de línea (caracteres #10 y #13; salto de linea y salto
de carro) de un TStrings.}
function QuitarSaltosLinea(Strs: TStrings;  
                          CharReplace:String=STR_EMPTY):String;
var
   Str:string;
begin
   Str := AnsiReplaceStr(Strs.Text, #10, CharReplace);
   Result := AnsiReplaceStr(Str, #13, CharReplace);
end

8 de comentarios

  1. pacman dice:

    no sirve

    8 noviembre 2010
  2. @pacman
    Pues ya dirás porqué no sirve, porque llevo años utilizando esta rutina.
    O das más explicaciones o das el error (si es que te da alguno).

    ;-(

    8 noviembre 2010
  3. Omar Romero dice:

    Lo probe y funciona perfectamente. Es la solución ya que probe varias y nada.

    Muchas gracias

    24 noviembre 2010
  4. fernandox dice:

    hola, yo tengo una duda…
    tengo una rutina para ‘postear’ en un foro, donde le paso como variable el contenido de un Tmemo como cuerpo del post.. el problema es que no reconoce los saltos de linea. la parte del codigo que manda el post es:

    …..
    parametros.Add(‘title=’ + Edit2.text ); // edit 2 el titulo del post
    //aqui el problema en memo6
    parametros.Add(‘message=’ + Memo6.Text);//el cuerpo en un memo

    parametros.Add(‘wysiwyg=’ + ‘0’);//otros parametros…..
    parametros.Add(‘taglist=’ + »);

    ……..

    parametros es de tipo:
    parametros: TStringlist;

    y para el post utilizo el «idhttp» de las indy…
    todo bien, manda el post, pero en el texto no reconoce los saltos de linea y sale todo junto…

    ya probe con #10, #13, [br], /n , etc
    probe (en el area del foro donde se publica los temas usa ‘bbcode’..) pero no me da el salto de linea.. todo junto sale

    en un archivo de texto que guarda un programa posteador vi que separa las lineas con un simbolo que es un cuadrito pequeno vacio, que es el salto de linea, si lo copio y lo pego digamos aqui en este texto, no pega el cuadrito sino que salta de linea (al hacer ctrl V).
    creo que es ese simbolo que necesito insertar en el tmemo en cada linea antes de enviar como parametro al foro, pero no se como…. pense que era el #13 pero como dije no da.. sabes algo de eso?

    10 febrero 2011
  5. @fernandox
    Hola fernando; Pues posíblemente sea el #13 (que es el único carácter de salto de línea), aunque codificado de otra manera. Incluso he visto componentes web que poseen su propia codificación (por ejemplo 2 espacios seguidos significan un salto de línea).

    Sería cuestión de probar qué código se está guardando cuando escribes.

    11 febrero 2011
  6. RamHerFer dice:

    Genial como siempre neftali. Funciona a la perfección.

    1 agosto 2015
  7. ALEX dice:

    Hola tengo un problema, deseo quitar únicamente los saltos de línea al inicio de un párrafo y al final del mismo, como le hago?

    en php he metido la función trim() pero esa me quita los espacios nadamas al inicio y al final pero no los retornos de carro
    si pongo un código como
    REPLACE(REPLACE(REPLACE(`PARRAFO`, CHAR(10), »), CHAR(13), »), CHAR(9), »)
    ME QUITA LOS RETORNOS DE TODO EL PARRAFO! QUEPUEDO HACER?

    12 septiembre 2019
  8. @ALEX
    Si sólo quieres quitar os del inicio y final deberás hacerlo manualmente recorriendo la cadena caracter a caracter. No existe ninguna funciona que sólo te quite los del inicio y del final. Replace, AnsiReplace y similares, reemplazan TODOS los caracteres que coinciden dentro de la cadena.

    13 septiembre 2019

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *