Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Busqueda con Ciclo for

Estas en el tema de Busqueda con Ciclo for en el foro de Java en Foros del Web. Hola que tal gente, espero que anden bien...Necesito ayuda con una busqueda que realizo de la siguiente manera: ->Extraigo la siguiente información (que es el ...
  #1 (permalink)  
Antiguo 19/12/2014, 17:16
 
Fecha de Ingreso: noviembre-2014
Mensajes: 16
Antigüedad: 9 años, 5 meses
Puntos: 0
Busqueda con Ciclo for

Hola que tal gente, espero que anden bien...Necesito ayuda con una busqueda que realizo de la siguiente manera:

->Extraigo la siguiente información (que es el detalle de una factura) de un archivo txt a un vector de registro:

FACTXS1;AM300;AM 300;258;200000;0%;$51600000;
FACTXS1;AM700;AM 300;278;200000;0%;$51600000;
FACTXS1;AM388;AM 300;398;200000;0%;$51600000;
FACTXS2;AM300;AM 300;300;200000;0%;$60000000;
FACTXS3;AM301;AM 300;258;200000;0%;$51600800;

->Defino el vector y el procedimiento de extraccion:


Código:
public class DET{
    String CDF,CDP,DES,CANT,PU,DAP,VTA;    
    }
    DET[] Detalle=new DET[9999];
    int w=0;

public void extracciond(){
String []tem=new String[9999];
       int k=0,l,h=0;
         char t=0;
          int j=0;
          String CAMPO="";
try{
if(rdetalle.exists()){ 
    
    try (BufferedReader Flee = new BufferedReader(new FileReader(rdetalle))) {
        String Slinea;
        while((Slinea=Flee.readLine())!=null) {
            l=Slinea.length();
            h=0;
            j=0;
            while (h<l){
                
                while(Slinea.charAt(j)!=';'){
                    t=Slinea.charAt(j);
                    CAMPO=CAMPO+t;
                    h=h+1;
                    j=j+1;
                }
                tem[k]=CAMPO;
                k=k+1;
                CAMPO="";
                j=j+1;
                h=h+1;
                t=0;
            }
            
            Detalle[w]=new DET();
            Detalle[w].CDF=tem[0];
            Detalle[w].CDP=tem[1];
            Detalle[w].DES=tem[2];
            Detalle[w].CANT=tem[3];
            Detalle[w].PU=tem[4];
            Detalle[w].DAP=tem[5];
            Detalle[w].VTA=tem[6];
            w=w+1;
            k=0;
        }   }
 muestradet();
} else {
JOptionPane.showMessageDialog(null,"El fichero no existe");      
}   
} catch (Exception ex) {  
JOptionPane.showMessageDialog(null,"Se ha producido un error "+ex);  
}
}
->La busqueda la realizo partiendo de un número de factura por ejemplo: FACTXS1


Código:
public void muestradet(){
int i,SW=-1;
String R="";
for (i=0;i<w;i++){
if (Detalle[i].CDF.equals(COF)){
SW=i; 
i=w;   
R=R+""+Detalle[SW].CDP+" \t"+Detalle[SW].DES+" \t"+Detalle[SW].CANT+" \t"+Detalle[SW].PU+" \t"+Detalle[SW].DAP+" \t"+Detalle[SW].VTA+"\n";
}
}
System.out.println(R);
}
->La cuestión es que debo obtener un listado con la información del detalle de la factura, y lo que obtengo solo es la información del detalle de un solo articulo (el primero que encuentra de forma descendente) , por ejemplo, del anterior listado de información solo obtiene:

FACTXS1;AM300;AM 300;258;200000;0%;$51600000;

->Y si realizo lo siguiente:

Código:
public void muestradet(){
int i,SW=-1;
String R="";
for (i=0;i<w;i++){
if (Detalle[i].CDF.equals(COF)){
SW=i; 
  
R=R+""+Detalle[SW].CDP+" \t"+Detalle[SW].DES+" \t"+Detalle[SW].CANT+" \t"+Detalle[SW].PU+" \t"+Detalle[SW].DAP+" \t"+Detalle[SW].VTA+"\n";
}
}
System.out.println(R);
}
Efectivamente al hacer clic en el botón (donde se invoca el procedimiento de extracción) al hacer clic la primera vez se obtiene correctamente la información correcta:

FACTXS1;AM300;AM 300;258;200000;0%;$51600000;
FACTXS1;AM700;AM 300;278;200000;0%;$51600000;
FACTXS1;AM388;AM 300;398;200000;0%;$51600000;

Pero al presionar de nuevo o al buscar otra información a partir de otro código de factura, se muestra la información duplicada y erronea.

Les agradecería muchísimo su colaboración...
  #2 (permalink)  
Antiguo 20/12/2014, 03:09
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Busqueda con Ciclo for

Buenas,

La nomenclatura de variables que utilizas es totalmente infernal y no se puede seguir tu código.

En cualquier caso, parece que tu problema es que solo inicializas Detalle la primera vez, de tal forma que en cada ejecución va acumulando resultados. Deberias crear una instancia de Detalle para cada generación de factura.

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: busqueda, netbeans
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:44.