Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como puedo desordenar un archivo ?? (https://www.clubdelphi.com/foros/showthread.php?t=14245)

Raptor 14-09-2004 17:15:19

Como puedo desordenar un archivo ??
 
hola a todos los delphiano..

Mi pregunta como se ve es que necesito leer un archivo de text, este archivo contiene numeros de telefono, pero vienen de forma ordenada pero yo necesito estos archivos de forma desordenada.

ejem. mi archivo viene

5904310
5904311
5914380
5926010

y yo lo quiero
5904311
5926010
5926010
5901310


o sea que no tengan un orden

me pueden dar una manito.

gracias de antemano...

Neftali [Germán.Estévez] 14-09-2004 17:36:39

Bueno si el archivo no es muy rande puedes hacer una "rutinilla" que fácilmente te los desordene utilizando 2 TStrings;

(1) Carga el fichero en TStrings1
(2) Utilizando Randomize y Random (en la ayuda de delphi hay un ejemplo) con la limitación de TStrings1.Count obtienes un número aleatorio X.
(3) Eliminas la línea X del TStrings1 y la pasas a TStrings2.
(4) Repite el (2) mientras queden líneas en TStrings1.

Espero haberme explicado decentemente.;)

defcon1_es 14-09-2004 17:40:29

Hola, no se si he entendido bien la cuestión:

¿el fichero lo quieres desordenado (aleatoriamente) o lo quieres en otro orden, es decir "TU" orden concreto?

[s]1er caso[/s]
Puedes cargar ese fichero en un TStringList (ignoro el tamaño que tiene) e implementar un algoritmo que intercambie 2 posiciones de los elementos del TStringList de forma aleatoria, usando el método Exchange del TStringList.

NOTA: Este proceso de "desorden" debe terminar alguna vez...

[s]2º caso[/s]
Debe haber un orden dentro del desorden... el orden que TU quieres que tenga el fichero, y dicho orden debe poder implementarse mediante un algoritmo...

Salu2.

Raptor 14-09-2004 20:59:14

Muchas gracias a los 2 probare con la ideas que me dieron.

ah, el archivo realmente no se de que tamano sera porque tiene muchos # de telefono.

Otra cosa el orden final realmente no me importa, lo unico que necesito es que esten desordenado.

Esto es para realizar un pequeno sistema de loteria.

si alguien tiene una mejor idea, pleasse se lo agradeceria

maruenda 14-09-2004 22:42:20

y en vez de desordenar el fichero, porque no eliges un numero al azar, y vas a la linea que te indica ese numero. y marcas los numeros que sacas, de manera que si los vuelves a sacar, repites la tirada. :cool:

Neftali [Germán.Estévez] 15-09-2004 09:37:07

Cita:

Empezado por maruenda
y en vez de desordenar el fichero, porque no eliges un numero al azar, y vas a la linea que te indica ese numero. y marcas los numeros que sacas, de manera que si los vuelves a sacar, repites la tirada. :cool:

Eso prodría ser problemático si hay que completar toda la lista de números, ya que si la lista tiene 5000 números (por ejemplo), a medida que se vayan acabando (cuando queden 5 números, por ejemplo) el número de veces que puedes tener que repetir la tirada puede ser muy grande :( .

rafita 15-09-2004 11:19:01

!Hola!

Si el fichero tiene más de un campo, ordenalo por otro campo y, prácticamente seguro, que no te quedará ordenado por el campo principal.

Si el número de teléfono es el único campo, entonces añádele otro con un número aleatorio y lo ordenas por este último campo. Además, puedes aprovechar para añadir un tercer campo donde marques si el número ha sido marcado o no (como solución a lo que te dice Neftalí).

Saludos.

Mick 16-09-2004 01:57:08

Si es para una loteria y no son muchisimos telefonos (no mas de unos cuantos miles), seria mejor elegirlos al azar como explica Neftali o maruenda, e ir eliminadolos de la lista, para que no se vuelvan a usar, ej:

Código:

var
 List : TStringList;
 Index: integer;
begin
  List:= TStringList.Create;
  try
    List.LoadFromFile('mistelefonos.txt');
    while List.Count>0 do begin
        Index:= random(List.Count);
        Memo1.Lines.Add(List[Index]);
        List.Delete(Index);
    end{while};
  finally
    List.Free;
  end;
end;

Saludos


La franja horaria es GMT +2. Ahora son las 23:44:44.

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