03 septiembre, 2007

JAFramework

.
Búsqueda Binaria

JAF Permite realizar búsquedas binarias sobre índices y sobre el archivo en si mismo.


Búsqueda Binaria sobre un Indice

El siguiente programa crea un índice por el campo nombre y luego le pide al usuario que ingrese el nombre del empleado cuyos datos desea consultar.

BusquedaBinariaIdx.java
   1:
2:package demo;
3:
4:import framework.JAFactory;
5:import framework.JAFile;
6:import framework.JAFileFactory;
7:import framework.JAIndex;
8:import framework.util.JAConsole;
9:
10:public class BusquedaBinariaIdx
11:{
12: public static void main(String[] args)
13: {
14: JAFileFactory factory=JAFactory.getFileFactory();
15:
16: // levanto el descriptor a memoria
17: factory.load("descriptor.xml");
18:
19: // obtengo un puntero al archivo EMPLEADOS.txt
20: JAFile a = factory.getFile("EMPLEADOS.txt");
21:
22: // creo el indice por nombre
23: JAIndex idxNom = a.createIndexOn("nombre");
24:
25: boolean ok;
26: REmpleado e = new REmpleado();
27:
28: // el usuario ingresa un nombre por consola
29: System.out.print("Ingrese Nombre: ");
30: String nom = JAConsole.readString(10);
31:
32: // finaliza con un nombre = "FIN"
33: while( !nom.trim().equals("FIN") )
34: {
35: // busco por legajo
36: ok = idxNom.binarySearch(nom, e);
37:
38: // si existe => lo muestro
39: if( ok )
40: {
41: System.out.println(e);
42: }
43: else
44: // si no existe muestro un mensaje
45: {
46: System.out.print("Ningun empleado ");
47: System.out.print("tiene el nombre [");
48: System.out.println(nom + "]");
49: }
50:
51: // ingreso el siguiente nombre
52: System.out.print("Ingrese Nombre: ");
53: nom = JAConsole.readString(10);
54: }
55:
56: a.destroyIndex(idxNom);
57: a.close();
58: }
59:}
60:

En la línea 33 invocamos el método binarySearch sobre el índice idxNom. El método retorna true o false según el valor que buscamos se encuentre o no y (si el valor se encuentra) completa los atributos del registro que recibe como parámetro con los datos leidos del archivo.

Notemos (líneas 30 y 53) que utilizamos la clase JAConsole para leer un String de longitud fija (longitud de 10 caracteres). Este método lee un valor alfanumérico por consola y lo trunca o lo completa con espacios a la derecha para retornar exactamente un String de longitud 10.


Búsqueda Binaria sobre el Archivo

Para aplicar el método binarySearch directamente sobre el archivo JAF asume que el archivo se encuentra ordenado por el campo por el cual vamos a realizar la búsqueda. En este caso el archivo está ordenado por el campo legajo.

BusquedaBinariaArch.java
   1:
2:package demo;
3:
4:import framework.JAFactory;
5:import framework.JAFile;
6:import framework.JAFileFactory;
7:import framework.JAIndex;
8:import framework.util.JAConsole;
9:
10:public class BusquedaBinariaArch
11:{
12: public static void main(String[] args)
13: {
14: JAFileFactory factory=JAFactory.getFileFactory();
15:
16: // levanto el descriptor a memoria
17: factory.load("descriptor.xml");
18:
19: // obtengo un puntero al archivo EMPLEADOS.txt
20: JAFile a = factory.getFile("EMPLEADOS.txt");
21:
22: REmpleado e = new REmpleado();
23: boolean ok;
24:
25: System.out.print("Ingrese Legajo: ");
26: int leg = JAConsole.readInt();
27:
28: Integer iLeg;
29: while( leg >= 0 )
30: {
31: // el metodo binarySearch de JAFile
32: // recibe (ademas) el campo por el cual
33: // se quiere realizar la busqueda
34:
35: iLeg=new Integer(leg);
36: ok = a.binarySearch("legajo", iLeg, e);
37:
38: if( ok )
39: {
40: System.out.println(e);
41: }
42: else
43: {
44: System.out.println("No existe leg");
45: }
46:
47: System.out.print("Ingrese Legajo: ");
48: leg = JAConsole.readInt();
49: }
50:
51: a.close();
52: }
53:}
54:

La única diferencia con el ejemplo anterior es que no creamos ningún índice. La búsqueda la hacemos directamente sobre el archivo. En la línea 36 invocamos el método binarySearch sobre la variable a (tipo JAFile) al que le tenemos que indicar el campo por el cual queremos que busque.

Recordemos que la búsqueda binaria solo funciona si el archivo se encuentra ordenado por el campo por el cual queremos buscar. En este caso: legajo.




.........................,...................



.

No hay comentarios.: