Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar salto de linea de TStrings (https://www.clubdelphi.com/foros/showthread.php?t=84656)

ecfisa 19-11-2013 01:14:03

Cita:

Empezado por nlsgarcia (Mensaje 469758)
La correcta definición de la función RemoveCRLF es la siguiente:

Hola Nelson.

¿ Por que consideras incorrecta la definición del procedimiento RemoveCRLF ?

Una simple prueba basta para ver que funciona correctamente...
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  SR: TSearchRec;
begin
  Memo1.Clear;
  if FindFirst('C:\Windows\System32\*.*', faArchive, SR) = 0 then
  begin
    repeat
      Memo1.Lines.Add(SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

procedure DeleteCRLF(TS: TStrings);
begin
  TS.Text := StringReplace(TS.Text, #$D#$A, #$20, [rfReplaceAll]);
  TS.Text := StringReplace(TS.Text, #$D#$A#$D#$A, #$20, [rfReplaceAll]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteCRLF(Memo1.Lines);
end;

Saludos :)

nlsgarcia 19-11-2013 01:26:48

ecfisa,

Cita:

Empezado por ecfisa
...¿ Por que consideras incorrecta la definición del procedimiento RemoveCRLF ? ...

Me refiero a la función RemoveCRLF no al procedimiento DeleteCRLF.

En la definición original de la función RemoveCRLF en el Msg #18, no se estaba eliminado el Carácter #10 (Salto de Línea), en la definición del Msg #20 si se elimina correctamente.

Espero que esto aclare el punto :)

Nelson.

ecfisa 19-11-2013 01:27:25

Hola.

Me faltó hacer una aclaración, si la ruta+nombre de archivo son cargados en el memo de la forma que se hace en el mensaje #21, la línea que se encarga de quitar la separación de párrafos es innecesaria:
Código Delphi [-]
  TS.Text := StringReplace(TS.Text, #$D#$A#$D#$A, #$20, [rfReplaceAll]);
Pero como no sé como realizaba la carga elmago00, no lo quise librar al azar...

Saludos :)

ecfisa 19-11-2013 01:40:32

Cita:

Empezado por nlsgarcia (Mensaje 469761)
En la definición original de la función RemoveCRLF en el Msg #18, no se estaba eliminado el Carácter #10 (Salto de Línea), en la definición del Msg #20 si se elimina correctamente.

Espero que esto aclare el punto

Totalmente: Leí mal.

Me confundió la terminación (Se nota que ambos estábamos pensando en "carriage return" y "line feed" :) )

Así que a eso se debió mi confusión :o.

Saludos :)

elmago00 19-11-2013 05:24:11

[nlsgarcia]
tu codigo funciona bien con poca cantidad de archivos, pero si deseo abrir mas de 825 archivos, muestra lo siguiente, como podras ver el memo lleno pero en blanco.


ecfisa

tu codigo funciona mostrando solo el nombre, pero si muestro el directorio + el nombre. el resultado es el mismo que el anterior, un memo en blanco. no si sea el limite de delphi para cada variable string. pues son 5000 imagenes.
no soporta el directorio mas el nombre, al parecer son demasiadas cadenas. no se por que me da ese resultado.

nlsgarcia 19-11-2013 05:33:57

elmago00,

Cita:

Empezado por elmago00
...tu codigo funciona bien con poca cantidad de archivos...

Pregunto:

1- ¿Puedes publicar una imagen donde funcione bien para tener una mejor idea del problema?.

2- ¿Si lo pruebas en algún directorio de Windows funciona o falla?.

Espero sea útil :)

Nelson.

elmago00 19-11-2013 05:51:57

[nlsgarcia]
todos los directorios es igual, mira esa imagen funciona bien con 100 archivos, el directorio mas el nombre.


funciona bien puedo abrir hasta 825 archivos , dependiendo que tan largo sea el directorio, pero si paso esa cantidad el memo variables se vuelven en blanco.

elmago00 19-11-2013 05:57:04

al parecer si el directorio es muy largo, solo abre unos 500 a 800 archivos, hasta e pensado dividir la búsqueda, para ver si las variables no soportan tanta cadena, pero cuando se almacena despues en una sola, da el mismo resultado en blanco.
e intentado todo, o al menos eso creo. alguien me da una luz

nlsgarcia 19-11-2013 06:24:54

elmago00,

Cita:

Empezado por elmago00
...mira esa imagen funciona bien con 100 archivos, el directorio mas el nombre...al parecer si el directorio es muy largo, solo abre unos 500 a 800 archivos...

Pregunto:

1- ¿Por que requieres tener en un TMemo, un string con la sumatoria total de Ruta+Nombre_Archivo de todos los archivos de un directorio en una misma línea?.

2- ¿Por que hay un TListBox con cada string individual formado con Ruta+Nombre_Archivo?, ¿Cual es la relación con el TMemo?, ¿Por que ambos tienen al parecer la misma información?.

Te comento:

1- Una variable String en Delphi tiene un límite de 2 GB, asumo que alcanzastes dicha cota al concatenar tantos Ruta+Nombre_Archivo en un mismo String.

2- Un TMemo como esta planteado en tu aplicación no es muy practico de manejar, aun con 100 archivos, te sugiero considerar otro modo de presentación de la información, quizás usar solo el TListbox o sustituir el TMemo por un TListView, o mostar un TextBox con la Ruta y en el TListBox solo los nombres de archivo, las opciones son múltiples, todo depende del objetivo final de tu aplicación.

Si es posible, explica cual es la naturaleza de tu proyecto para tener una mejor comprensión del problema planteado.

Espero sea útil :)

Nelson.

elmago00 19-11-2013 07:08:34

Solucionado
veras, el programa es un ftp, que desarrollamos en la empresa en la que trabajo, debe cargar todo los archivos de manera aleatoria. uno tras otro.
no quiero mostrarla en el memo, solo lo uso por que se que soporta string, y la variable donde envió los archivos a cargar debe ser string,
comparaba la variable con texto del memo. pero lo solucione haciendo una referencia todos los archivos de una sola vez, en un solo directorio como constante y no uno tras otro. te preguntaras ¿por que no mueves la carpeta? por que el servidor no reconoce ese método, solo archivos con el ruta especifica almacenado en archivo externo en este caso un .txt. tenias mucha razón la variable sobrepasaba los 2gb. pero al fin lo solucione.

agradezco a todos por su ayuda. saludos a todos, son los mejores,y muy amables, mil gracias.


La franja horaria es GMT +2. Ahora son las 00:10:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi