Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/12/2014, 17:16
McHenryGS
 
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...