->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:
->La busqueda la realizo partiendo de un número de factura por ejemplo: FACTXS1public 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); } }
Código:
->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: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); }
FACTXS1;AM300;AM 300;258;200000;0%;$51600000;
->Y si realizo lo siguiente:
Código:
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: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); }
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...