Pascal/Turbo Pascal - ordenar archivo

 
Vista:

ordenar archivo

Publicado por damian castelli lluch (31 intervenciones) el 30/04/2007 01:38:22
hola gente, tengo un problemon, tengo una entrega de mi facultad en un mes, de unos cuantos programas, estoy con este problemita, osea..... de que manera ustedes ordenarian un archivo de registros (ordenado por apellido, por dni, da igual) me encuentro en un punto que estoy probando ideas, pero todavia no logro hacer funcionar mi idea que se las paso a comentar..

el archivo que contiene los datos de las personas esta desordenado, lo ordeno con un modulo llamando "INDIZAR_REGISTROS" en el cual hago un recorrido del archivo y voy sacando el mayor y luego le coloco un "~" adelante de la variable apellido (el cual cuando lo vuelve a recorrer es ignorado ya que es mayor en el cod ascii que cualquier caracter alfabetico), luego de esto, voy indezando en un archivo de integer's el orden.
una vez finalizado hay un modulito que le quita el caracter "~" a la variable apellido de cada registros....

para mi esta dentro de todo bien la idea, pero todavia no logro hacer que funcione de manera correcta el programa.
en fin me gustaria ver que opinan, necesito de sus ideas.
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ordenar archivo

Publicado por Carlos Guimaraenz (265 intervenciones) el 30/04/2007 05:14:13
Sería una buena idea, si el tamaño del archivo no es excesivo, ir insertando ordenados en una lista, y luego recorres la lista guardando en el archivo.
Si fuese muy grande el archivo, puedes dividir e ir ordenándolo de a partes... es más complicado, pero es la solución si es que tienes problemas con la memoria.

Si necesitas ayuda para hacer eso, avisa. Un abrazo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por Diego Romero (996 intervenciones) el 30/04/2007 10:53:39
Ordenar un archivo, por el campo que sea, no es diferente a ordenar cualquier otra estructura de datos, aunque claro, tiene sus particularidades.

Una de las técnicas es la comentada por Carlos: cargas el archivo en memoria, usando una lista dinámica, ordenas la lista y luego sobreescribes el archivo con la lista ordenada. Esta técnica es válida cuando la cantidad de registros es pequeña.

Ahora bien, ordenar el archivo en sí es lo mismo que ordenar un array, el problema aquí son dos. Uno es la eficiencia, mover cientos de registros lleva mucho tiempo por lo que hay que implementar el método de ordenación más eficiente posible, es decir el Quick Sort. El otro es que si el archivo va a seguir que crieciendo hay que volver a ordenarlo por cada nuevo registro, lo que causa un detrimento en la eficiencia. De allí que los motores de bases de datos usen índices.

En fin, tú dirás qué técnica quieres/puedes usar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por micropais (209 intervenciones) el 01/05/2007 13:17:23
saludos damian castelli

Usas TP7 o Free , usando free-pascal no tienes que tener problemas con la memoria yo he creado arrays de 150.000 elementos ,sin ningun tipo de problemas . (se pueden hacer mayores hasta 2 GIGAS - que son unas cuantas KB ....)

Para ordenar un fichero de registros tan solo hace falta cargar el campo de cada uno de los registros que vas a ordenar p.e por apellido o por nombre o por telefono pero no todo el registro de cada uno , en TP7 creo que solo te deja 64kB
maximo, para toda la extructura del array unas 257 cadenenas de tipo string , de 255 caracteres cada uno , normalmente cada campo de un registro no suele ocupar mas de 25 caracteres maximo que en 64KB darian para mas de 2600 campos de registros ,cifra que creo que no te van a pedir en ninguna practica, a lo sumo te mandaran ordenar 4 o 20 registros , cosa que cabe en cualquier arryay
y para ordenarlos te bastaria con "cualquier metodo de ordenacion."

se prodian usar trucos para segir usando TP en vez de FREE como por ejemplo
cargar solo el primer caracter o cifra de cada campo y cuando la extructura estubiera ordenada usar el segundo caracter de los campos repetidos y asi sucesivamente , aunque hay mas trucos no creo que tengas que apurar tanto

centrate en la practica que seguro que seran menos de 10 o 15 registros.
si tienes problemas con los metodos de ordenacion en este foro hay unos cuantos e incluso yo mismo me he inventado un metodo que todavia no está publicado tan sencillo de enterder y facil que hasta un niño pequeño lo sabria aplicar y funciona perfectamente para extructuras no superiores a 20.000 0 50.000
elementos apartir de aqui el tiempo supera los 30 segundos hasta varios minutos para extructuras de 50.000 a 150.000 elementos donde un metodo shell o quick no supera los 8 segundos en la misma extructura.

En la practica mas de 3000 registros no los usan ni las empresas mas grandes
a no ser que quieras copiar la guia de telefonos o mantener una pagina WEB que
para ello se usan bases de datos con sus propios gestores y motores de busqueda y ordenacion.

Si posteas aqui la extrucctura de tu registro con sus correspondientes campos , te podremos echar una mano .

SALUDOS y cualquier duda postea .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por Diego Romero (996 intervenciones) el 01/05/2007 22:51:54
micropais ha dicho:
"En la practica mas de 3000 registros no los usan ni las empresas mas grandes..."

Debes estar bromeando :P.
Mi cliente más pequeño (en volúmen de ventas) supera 10 veces esa cifra en su archivo de artículos.
Y mi clientes más grande genera esa cantidad de registros en ... una mañana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por micropais (209 intervenciones) el 02/05/2007 12:56:58
Saludos Diego Romero.

Revisa el texto anterior la verdad quise decir 1.000 elementos en vez de 3.000

Para una empresa un poco SéRIA , que se precie,que maneje mas datos e incluso menos datos , "le conviene usar una base de datos profesional" como oracle sql u otras muchas quen purulan por ahi
el acceso a datos se puede exportar a otras bases de datos , ademas de poder usar red con otras bases y otras opciones mas profesionales que usar pascal ,
no digo que no se pueda usar pascal para ello, digo que hay entornos mas profesionales , rapidos con recursos estandar ,es como querer decir que tu empresa no usa word si no que usa un procesador de textos casero echo por
un programador pascal ....

El pascal se usa para aprender , aunque se pueden hacer aplicaciones bastante majas , la gente empresarial prefiere los paquetes prefabricados y normalmente con MARCA y licencias y suelen (no siempre es cierto) estar programados bajo entornos de mas alto rendimiento . aunque aveces prefieren la MARCA o la FAMA
de dichos productos.

A no ser que seas programador experto de una empresa de telecomunicaciones dudo mucho que te hagan encargos de productos tipo base de datos , y mas aun cuando estan disponible en el mercado productos altamente competentes y algunos hasta gratuitos.

¿Cuantos registros necesita una practica de universidad o centro de estudios?
para saber si el estudiante es, o no es apto , si te piden 1.000.000 de registros
y encima teclearlos a mano - eso no es programacion ,eso es es mala leche.....

Saludos de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por Diego Romero (996 intervenciones) el 02/05/2007 21:56:18
Evidentemente te has expresado mal en la cita que escribí. Se entiende como que ninguna empresa usa tantos registros, sea con Pascal o no.

Por supuesto con mis clientes uso lo que tú llamas "bases de datos profesionales", yo prefiero llamarlos DBMs (para el caso, FireBird y BDE para aplicaciones Delphi y COBOL para las otras).

Sin embargo lo que comentas me parece bastante injusto. Sí tiene mucho valor saber cómo hacer un DBM, aunque sea por simple placer. Para alguien que está estudiando y aprendiendo a programar encarar un proyecto así le reporta un gran beneficio: experiencia. Y quien sabe, resultó que un estudiante universitario se planteó el desafío de escribir el kernel de un sistema operativo y hoy gracias a eso tenemos Linux :).

Por supuesto acepto la crítica de que alguien que ya está trabajando profesionalmente no tiene tiempo (principal factor) ni los recursos (betatest) para hacer su propio DBM, pero para un estudiante esas cosas son solo cuestión de ganas... y una pizca de talento :P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar archivo

Publicado por micropais (209 intervenciones) el 03/05/2007 20:02:39
saludos Diego Romero.

Voy a estar unos dias fuera sin conexion , si quieres segir con este tema postea a mi correao electronico.

A ver si nos entendemos muchacho , damian castelli lluch pregunta sobre como manejar registros, el solo echo de preguntarlo aqui demuestra que posee unos conocimientos basicos sobre el lenguaje , se supone que esta empezando como todos ,que enpezamos algun dia .

querer crear un S.O con esos conocimientos me parece un burrada de momento , el dia de mañana quien sabe ...

Bueno al grano , en las practicas no suelen pedir muchos registros , por el solo echo de tener que teclearlos la gente se desanima , la tarea del profesor no es esa , es simplemente ver si la gente le sigue con las clases.

Que damian castelli lluch quiera superarse , me parece estupendo , pero cuando te piden 3 o cuatro registros dudo mucho que la gente quiera superarse con 1000
ni siquiera con 100 o 50 ya que el echo de tener que teclearlos a mano no corresponde a los programadores si no a los taquigrafos o supuestas secretarias que el dia de mañana operen con supuesto programa que de echo es de PRACTICAS para una facultad no un producto comercial.

Creo que nos salimos del tema , y que demuestras poca educacion .
"Yo tambien podria Criticarte en tus respuestas" y ademas bastante bien , pero no es mi cometido , tambien he conocido muchos Fantasmas que se creen DIOS
por el echo de saber algo de programacion , Muestra el titulo de ingeniero
de telecomunicaciones (telefonica) o tu diploma de ( microsoft ) que yo te lo confirmo y te dare un poco mas de respeto cuando presentes mas educacion al resto de usuarios.

- Espero que leas detenidamente los post y me digas cual es tu problema
conmigo , para que saltes a la primera de cambio.

Por cierto me gustaria ver el nombre de esas empresas que usan pascal para
gestionar sus productos y ver sus grandisimos movimientos.
lo puedo confirmar en el ministerio de hacienda... o en el de asuntos exteriores.

SALUDOS "sinceros y cordiales" Diego Romero de micropais.
espero mas comrension y sinceridad , no batallitas .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar