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...