FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Leer y ordenar fichero en delphi
Hola,
Llevo un par de semanas programando en Delphi y necesito ayuda. Tengo que leer un fichero plano. Tengo que ordenar todas las líneas en base a dos campos y cada línea contiene varios campos que están separados por el simbolo |. Se leer las líneas y también encontrar este símbolo con la función pos, pero no tengo ni idea de como ordenarlos. ¿Alguien me podrí dar una pista? Gracias, Un saludo |
#2
|
||||
|
||||
Código:
campo1 | campo2 | campo3 | campo4 ¿campo1 y campo 2? o ¿puedes necesitar ordenar por campo2 y campo3 sin tener en cuenta el campo1?. - ¿el usuario debe poder elegir los campos de ordenación? Cada ordenación necesitará de algo distinto. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
leer y ordenar ficheros planos en delphi
Hola,
en total cada línea cuenta de 12 campos campo1 | campo2 | campo3 | campo4 | ... y tengo que ordenar las líneas en base al campo2 y campo8 El usuario no tiene que seleccionar por qué campo ordenar, sino que tiene que ser en ascendente. gracias |
#4
|
||||
|
||||
La forma más sencilla que se me ocurre es utilizar un TStringList que ya posee métodos de ordenación. Monta una Clave (string) utilizando los dos campos que necesitas para ordenar, manteniendo en todos los casos la misma longitud y conviertiendolos a String si no lo son. Luego esa clave se la pasas a un StringList y le mandas que ordene. Ya tendrás las claves ordenadas. A ver si me explico; Suponiendo que los campos fueran Nombre y Cantidad, por poner uno de cada tipo: Carlos--234--... Felipe--123--... Ana-23--... Juan--3456--... Andres--4--... Se trataría de montar la cadena de esta forma: (Nombre rellenando hasta 15 y Cantidad también); En este caso he rellenado con 0, pero puedes usar otro caracter. 000000000Carlos000000000000234 000000000Felipe000000000000123 000000000000Ana000000000000023 00000000000Juan000000000003456 000000000Andres000000000000004 De esta forma ahora ya puedes pasar estas cadenas y te ordenará correctamente. El pointer (TObject) puedes utilizarlo para apuntar a la posición de la lista inicial. No se si me expliqué más o menos claramente.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
leer y ordenar ficheros planos en delphi
Si, creo que ya te he entendido.
1. Montó la cadena. 2. Pasarlas al StringList 3. Usar el método de ordenación que tiene el StringList pero y al StringList le tendría que decir por qué campo ordenar no? hay ya no lo tengo... vamos que no he entendido muy bien. Si me puedes aclarar este último punto.... gracias un saludo |
#6
|
|||
|
|||
Voy a intentarlo.
estoy mirando como funciona el objeto StringList y si no lo consigo ya vuelvo a escribir. Gracias por todo. Un saludo |
#7
|
|||
|
|||
Hola,
Tengo una duda. Cargo en el TStringList todas las líneas del fichero. pero el método sort no tiene como pasarle los parámetros. sl := TStringList.Create; try Reset(ftIN); Rewrite(ftOUT); while (not EOF(ftIN)) and (Error<> 1) do begin Readln(ftIN, S); sl.Add(S); ... pero como le digo que quiero ordenarlo en base al campo2 y 8?? con el método xprocs.strTokenToStrings(S,'|',s2); puedo cargar en otro TStringList (s2) todos los campos que tiene pero no se como seguir. un saludo. |
#8
|
||||
|
||||
Por pasos:
(1) Carga el fichero en un TStringList (llamaremos el original). Hay un método que lo hace, esa es otra de las ventajas del TStrigList.
(2) Monta un segundo TStringList con las cadenas; Ese segundo es el que utilizaremos para ordenar. Tendrás las cadenas y el apuntador e la posición en la lista original.
Ahora tu segunda lista tiene las cadenas 2 y 8 y la posicion en la lista original; Al ordenar, ordenará por las cadenas y segirás teniendo cada cadena con un entero que te dirá la posición en la lista original. (3) Ordenar.
Si originalmente la lista estaba así (TS): Lunes Martes Miercoles Jueves Viernes Sábado Domingo La segunda lista estará así (TS2) despues de ordenar; Lo segundo es el apuntador: Domingo (7) Jueves(4) Lunes(1) Martes(2) Miercoles(3) Sábado(6) Viernes(5) Por lo tanto puedes reordenar la lista original en una tervera (TS3) utilizando algo así:
Espero que quede más claro.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 16-10-2008 a las 11:22:11. |
#9
|
||||
|
||||
Edito: Neftali sigue siendo el más rápido del Oeste.... .
(No sé si borrar el mensaje o dejarlo, lo dejo de momento, si te lías más, olvídame , prácticamente digo lo mismo que Neftali) Vamos por partes: - Para cargar el fichero, puedes usar un stringlist llamado fichero y usar fichero.LoadFromfile('ruta completa.txt'); Ahora por cada elemento de ese string, tienes que recorrerlo y ponerlo en formato: 000000000Carlos000000000000234 Suponiendo que "Carlos" es el campo1 y "234" es el campo8 Estos strings con formato especial, vamos a cargarlo en otro stringlist llamado Aordenar, de forma que lo añadimos así:
Un ejemplito, Supongamos que aordenar (después de llamar a Sort) tiene esto Código:
string Object[i] 00000Antonio 3 00000Carlos 1 También significa que en segundo lugar de la lista ordenada, está "Carlos" el cual se encuentra en fichero[1] Quizás sea un lío, te aconsejo probar con algo así
Dicho de otra forma Aordenar.objects[i] guarda la linea en que se encuentra ese individuo en el archivo. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#10
|
|||
|
|||
leer y ordenar ficheros planos en delphi
OK.
Con las explicaciones que me habeís dado espero conseguirlo esta tarde. Ya os comentaré que tal me ha ido. muchas gracias a los dos. un saludo |
#11
|
||||
|
||||
Bueno, eso debe ser que no vamos tan mal encaminados, pistolero!
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#12
|
|||
|
|||
leer y ordenar ficheros planos en delphi
Hola,
lo he conseguido!! ahora lo veo sencillo, pero no me salía!!! Muchas muchas gracias. un saludo |
#13
|
|||
|
|||
leer y ordenar ficheros planos en delphi
Hola,
lo he conseguido!! ahora lo veo sencillo, pero no me salía!!! Muchas muchas gracias. un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Leer parte de un fichero .RTf | Tonio | Varios | 2 | 27-03-2008 11:25:53 |
leer de fichero | machingol | Varios | 7 | 09-05-2007 17:22:42 |
Leer fichero | rocio84 | Varios | 1 | 21-05-2006 10:45:06 |
leer fichero de texto | davidgaldo | Varios | 1 | 08-11-2005 15:05:12 |
Leer un fichero .ini | oesteve | OOP | 6 | 16-06-2003 16:40:20 |
|