La Web del Programador: Comunidad de Programadores
 
    Pregunta:  58966 - ORDENACIÓN FICHERO SECUENCIAL EN JAVA
Autor:  maria jose ramirez camarena
Hola, buenos días:
tengo un fichero java, como consecuencia de una descarga de una base de datos. Es un fichero de 1000 registros que necesito ordenarlo por un par de campos del registro.
¿Puede alguien decirme como hacerlo con instrucciones java?
Un saludo

  Respuesta:  Luciano Luis Kuhliger Bertoni
Usa el método de selección o de burbuja para ordenar los registros. En el de selección tomas el primer registro y lo comparas con todos los demás registros, si encuentras otro registro que es menor al registro que tienes, los intercambias, y éste registro que pusiste al principio, por el intercambio, lo sigues comparando con los registros que te quedan por comparar, si encuentras otro registro todavía menor, los intercambias nuevamente, y este nuevo registro que pusiste en la primera posición lo sigues comparando con todos los registros que falten, repitiendo todo el proceso de comparar e intercambiar con otros registros menores, hasta que se acabe el archivo, cuando se acaba el archivo el registro menor de todos está en la primera posición, ahora tomas el segundo registro, y lo comparas con todos los registros del archivo y si hay otro menor lo intercambia, y este nuevo registro lo comparas con todos los registros que faltan, al terminarse el archivo ya tienes el segundo registro ordenado, luego vas al tecer registro y haces los mismo, y así sigues con todos los registros hasta comparar los dos últimos registros del archivo, intercambiandolos si es necesario, entonces el archivo ya quedó ordenado. Puedes concatenar ( unir ) los dos campos que quieres para compararlos, o comparar uno y luego el otro. Cada registro tiene una posición física en el archivo por lo que guarda el byte en donde empieza el registro que vas a leer y a partir de ese byte grabas el nuevo registro. Espero que tus registros sean de la misma longitud, de no ser así tendrías que crear un archivo temporal para ir acomodando los registros.

Te mando el ejemplo con una tabla, analízalo, la lógica sería igual.

//------------- Ordena.java -----------------


public class Ordena{

public static void main(String[] argumentos){

int[] t = new int[10]; //---- crea tabla
int i,j,aux;

t[0]=6; //---- Carga datos desordenador ( se pueden pedir
t[1]=8; //---- o leer de archivo )
t[2]=4;
t[3]=9;
t[4]=1;
t[5]=3;
t[6]=7;
t[7]=2;
t[8]=8;
t[9]=5;

//---- Ordena los 10 números
for(i=0;i<9i++){
for(j=i+1;j<10j++){
if(t[i]>=t[j]){ //---- Si el primero es mayor que segundo intercambio
aux=t[i]; //---- para que el primero sea el menor
t[i]=t[j];
t[j]=aux;
} } }

//---- Imprime los 10 números
for(i=0;i<10i++){
System.out.print(" "+t[i]);
} }
}

Espero te sirva esto.

Saludos.