![]() |
Eliminar salto de linea de TStrings
Hola,
estoy desarrollando un programa simple en el cual incluye una funcion para pasar un TStrings a un memo, el problema es que siempre hace el salto de linea, llevo 3 dias en esto, ya intente esto clubdelphi.com/foros/showthread.php?t=21324 no funciona, lo he modificado de varias maneras, me dice "Acess Violation" pero nada, uso XE3 mi programa es en Firemonkey. gracias por responder. |
Estimado sería tan amable de escribir algo de código para intentar visualizar cual sería su problema...Como dice alguien por aquí "La bola de cristal esta fallando..." :D
|
lo siento mi conexion a internet no es muy buena,
como dije antes me dice Invalid Pointer o Acess Violation, esto me tiene de algo impotente, pues es algo simple lo se, pero a mi no me funciona, por algo que quiza no eh visto. lo que hago es buscar archivos y luego guardar el resultado, funciona perfecto, pero al pasar el memo siempre salta de linea. aqui utilizo esto clubdelphi.com/foros/showthread.php?t=21324 este me dice Acess Violation var:Listado2:TStrings; lista3:TStrings; begin lista:= TStringList.Create; Listado2:= TStringList.Create; BuscarArchivos4(carpeta, '*.exe', faAnyFile, lista3); Listado2:=lista3; //aqui hago el preceso segun el ejemplo anterior lista4.free; Listado2.free; despues use este pero tampoco me funciona clubdelphi.com/foros/showthread.php?t=84303 tambien use este {:Elimina los saltos de línea de un TStrings. Elimina los saltos de línea (caracteres #10 y #13; salto de linea y salto de carro) de un TStrings. @param Strs TStrings del que se desean eliminar los caracteres @param CharReplace Caracter a sustituir } 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; y hasta el mas simple ShowMessage(TStringsToString(Listado2)); todos me dice acces violation o invalid pointer. en otras ocasione me muestra el memo en blanco, lleno de lineas pero en blanco "si tienes la bola de cristal pásamela por favor, así no quiebro el cerebro" jejeej |
Amigo
|
elmago00,
Cita:
El código anterior permite pasar la información de un TStrings a un TMemo. Espero sea útil :) Nelson. |
cloayza
tu codigo funciona bien en ShowMessage, pero al pasarlo al memo, lo muestra en blanco, esta lleno pero en blanco, lo pase a una varable string, y lo guarde a un .txt y lo muestra en blanco, pero lleno. estoy probando el tuyo ahora [nlsgarcia] por cierto los archivos a leer son 2000 y el nombre de cada uno tiene 10 letras, por lo que no se si el problema sea ese, pues son 20000 caracteres. veo que solo guarda y muestra hasta 5000 caracteres, cuando leo mas los muestra lleno y en blanco a la vez, esto me rompe la cabeza. es la primera vez que veo esto asi. no es mi memoria, pues hice uno en vb.net y otro en java y funcionan bien leen 350000 lineas |
[nlsgarcia]
acabo de probar el tuyo y sigue igual, en el showmesage con salto de linea funciona pero al memo, lo muestra repleto pero en blanco. y siempre hace salto de linea esto me tiene desesperado ya. son 13 horas al dia pegado al computador, y no le veo por donde. solo los puedo hacer mostrar en el memo o variables con salto de linea. auxilio. gracias a los dos por sus respuestas |
señores anuncio mi futuro retiro. no puede ser que no le encuentre solución a esto de "variable llena pero en blanco"
como desarrollador es la primera vez que me veo tan impotente. en fin creo que alguna vez se pierde, saludos a todos y gracias por haberme ayudado. |
elmago00,
Cita:
![]() Pregunto: 1- ¿Esto es lo que requiere tu programa? 2- De no ser así, ¿Puedes detallar con un ejemplo como quieres que quede formateada la información? Espero sea útil :) Nelson. |
Cita:
Incluye el código completo para ver que hay... Saludos...;) |
elmago00,
Cita:
Cita:
El código anterior permite pasar la información de un TStrings a un TMemo en Delphi XE4 con FireMonkey HD en una máquina virtual VMWare con Windows 7 Professional x32, como se indica en la siguiente imagen: ![]() Espero sea útil :) Nelson. |
1 Archivos Adjunto(s)
aqui el codigo fuente un simple ejemplo
Archivo Adjunto 2784 |
recuerden quiero eliminar el salto de linea, pero soporte gran cantidad de nombre de archivos por ejemplo 20000 nombres, siempre solo puedo ver todo el valor de la variable pero son salto, y eso es lo que no quiero.
|
elmago00,
Cita:
Espero sea útil :) Nelson. |
quiero el directorio mas el nombre del archivo. asi como aparece en la lista, pero sin el salto de linea,funciona perfecto con 825 direcciones de archivos, pero no puedo leer mas de eso, si lo hago aparece todo en blanco y quiero leer 5000 cadenas.
|
Hola elmago00.
Creo que nlsgarcia se refiere a como deseas la salida en el memo, si es: Código:
C:\Windows\System32\tasklist.exeCódigo:
C:\Windows\System32\tasklist.exeC:\Windows\System32\Taskmgr.exeSaludos :) |
tal como tu lo pones en el segundo ejemplo, eliminar todos los saltos de linea y en lugar de hacer el salto que aparezca un espacio entre ellos. eso lo consigo pero repito solo 825 direcciones de ficheros, mas no puedo pues en el memo me aparece en blanco, al igual que cualquier variable a donde deseo enviar la información. solo funciona bien en showmessage, 5000 diferentes direcciones sin salto de linea, pero no lo asi, sino que en el memo.
|
elmago00,
Cita:
Cita:
Revisa este código: El código anterior elimina los caracteres de CR y LF de los strings contenidos en un TString y los sustituye por un espacio en blanco, asignando la salida resultante a un TMemo, como se muestra en la siguiente imagen: ![]() Espero sea útil :) Nelson. |
Cita:
Entonces proba de este modo:
Ejemplo de uso:
Saludos :) |
elmago00,
Continuación del Msg #18: La correcta definición de la función RemoveCRLF es la siguiente: Espero sea útil :) Nelson. |
Cita:
¿ Por que consideras incorrecta la definición del procedimiento RemoveCRLF ? Una simple prueba basta para ver que funciona correctamente...
Saludos :) |
ecfisa,
Cita:
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. |
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: Pero como no sé como realizaba la carga elmago00, no lo quise librar al azar... Saludos :) |
Cita:
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 :) |
[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. |
elmago00,
Cita:
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. |
[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. |
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 |
elmago00,
Cita:
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. |
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 08:49:34. |
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