como recorrer un archivo de palabras vetadas y descartarlas para una comparacion

Iniciado por or.gutierrez, 4 Noviembre 2014, 15:15 PM

0 Miembros y 2 Visitantes están viendo este tema.

or.gutierrez

Estimados junto con saludar me dirijo a ustedes para solicitar ayuda con respecto a algo que estoy desarrollando.

mi problema radica básicamente en que debo realizar una comparación de datos entre un archivo de texto y otro generado desde un pdf,  el archivo pdf me genera datos basura que no utilizare para comparar, y estos datos los puse en un txt que pretendo utilizar para que no los
tome en cuenta cuando compare y es acá donde no se como llevar a cabo eso. Agradeciera si me pudieran ayudar a ver la luz con este asunto ya que  me tiene arrojando humo por la cabeza xD

la clase donde tengo los métodos es así:

Desde ya agradezco la ayuda a todos. Saludos y buen día
Código (java) [Seleccionar]
public class PdfFile extends Files{

private int folio;
private Date periodoPago;
private String nombreEmpresa;
private float totalMes;
private ArrayList trash;


public  PdfFile(){
if(trash==null){
trash = new ArrayList();


}
}

public PdfFile(int codigoOficina, String rutEmpresa, int codigoNomina,
Date fechaVencimiento, int folio, Date periodoPago,
String nombreEmpresa, float totalMes) {
super(codigoOficina, rutEmpresa, codigoNomina, fechaVencimiento);
this.folio = folio;
this.periodoPago = periodoPago;
this.nombreEmpresa = nombreEmpresa;
this.totalMes = totalMes;
}
public int getFolio() {
return folio;
}
public void setFolio(int folio) {
this.folio = folio;
}
public Date getPeriodoPago() {
return periodoPago;
}
public void setPeriodoPago(Date periodoPago) {
this.periodoPago = periodoPago;
}
public String getNombreEmpresa() {
return nombreEmpresa;
}
public void setNombreEmpresa(String nombreEmpresa) {
this.nombreEmpresa = nombreEmpresa;
}
public float getTotalMes() {
return totalMes;
}
public void setTotalMes(float totalMes) {
this.totalMes = totalMes;
}
public ArrayList getTrash() {
return trash;
}
public void setTrash(ArrayList trash) {
this.trash = trash;
}

public Boolean compararLinea(String linea){
for(int i=0;i<trash.size();i++){
if(trash.get(i).toString().equalsIgnoreCase(linea)){
return true;
}else{
return false;
}
}
return false;
}

public void llenarArreglo(String file) throws IOException{
BufferedReader reader = new BufferedReader(new FileReader(file));
while(reader.ready()){
trash.add(reader.readLine());
}
}
}


Código (java) [Seleccionar]
public class ComparaTxtPdf {

public void compararNominas() throws IOException{

String descptnFile  = "C:\\Log.txt";
//aca debo de capturar los archivos con los mismos nombres, ya que los documentos se rigen por una nomenclatura
//esto es para pruebas
File dirTxt = new File("C:\\NominasTxt\\");
String[] nominasTxt = dirTxt.list();

File dirConver = new File("C:\\PDFconver\\");
String[] converTxt = dirConver.list();

PdfFile pdfPrueba = new PdfFile();

for (int x=0;x<nominasTxt.length;x++){//SE RECORRE EL ARREGLO CON LOS NOMBRES DE ARCHIVO
           String mandante=("C:\\NominasTxt\\"+nominasTxt[x]);//SE ALMACENA LA RUTA DEL ARCHIVO A LEER.
           
           //no es necesario recorrer los pdf, ya que solo se necesita comparara el txt con los valores de las nominas que ya estan dentro de un fichero, se sugiere usar
           //hashmap para guardar los pdf
           
           for (int i=0;i<converTxt.length;i++){//SE RECORRE EL ARREGLO CON LOS NOMBRES DE ARCHIVO
           String aComparar=("C:\\PDFconver\\"+converTxt[i]);            
         
    try{
    // Crea los archivos leer archivo escribir archivo
    FileReader actualFileReader  = new FileReader(mandante);
    FileReader expctdFileReader  = new FileReader(aComparar);

    FileWriter resultDesc = new FileWriter(descptnFile);    
   
    //PRUEBA HASHMAP
    //asigno el string que necesita el metodo llenarArreglo de la clase PdfFile
    pdfPrueba.llenarArreglo("C:\\palabrasVetadas.txt");
   
    BufferedReader expcFileBufRdr = new BufferedReader(expctdFileReader);
   
    String[] campos=null;
   
    String rut,nombre=" ";
    int cuota, folioCredito, totalCuotas, tolalPagar, valorCuota;
   
   while(expcFileBufRdr.ready()){
   
    Record record = new Record();
   
   if(!pdfPrueba.compararLinea(expcFileBufRdr.readLine()) && expcFileBufRdr.readLine()!=null){
   
    campos = expcFileBufRdr.readLine().split(" ");
    record.setRutDeudor(campos[0]);
    record.setCuota(1);
    record.setFolioCredito(1);
    record.setNombreDeudor("");
    record.setTotalCuotas(1);
    record.setTotalPagar(2);
    record.setValorCuota(2);
   
    System.out.println("este es el campo rut " + campos[0]);
   
    //System.out.println("Tamano arreglo" + pdfPrueba.getPalabrasBasuras().size());
    //pdfPrueba.llenarArreglo("C:\\palabrasVetadas.txt");

    //System.out.println("Tamano arreglo" + pdfPrueba.getPalabrasBasuras().size());
   
    for(int a =0;a<pdfPrueba.getTrash().size();a++){
    //System.out.println("Palabras basuras : "+pdfPrueba.getTrash().get(a));
   
    }
   
   }  
   }    
    //FIN PRUEBA HASHMAP    
    }
    catch( FileNotFoundException e ){
            e.printStackTrace();
    }
}
}
}
}

Pablo Videla

Código (java) [Seleccionar]
 if(!pdfPrueba.compararLinea(expcFileBufRdr.readLine()) && expcFileBufRdr.readLine()!=null){

En esa linea compadre ya estas dejando de leer datos basura que insertaste en el arrayTrash en tu clase que tiene los datos del pdf.

Código (java) [Seleccionar]
public void llenarArreglo(String file) throws IOException{
BufferedReader reader = new BufferedReader(new FileReader(file));
while(reader.ready()){
trash.add(reader.readLine());
}
}

Ahi lo estas usando, acuerdate que pasaste por parametro el archivo como String.


y aca lo estas comparando

Código (java) [Seleccionar]
public Boolean compararLinea(String linea){
for(int i=0;i<trash.size();i++){
if(trash.get(i).toString().equalsIgnoreCase(linea)){
return true;
}else{
return false;
}
}
return false;
}

or.gutierrez

Gracias por la respuesta entiendo mas menos la lógica de que ya las palabras basura se están leyendo y están por así llamarlo en consideración, pero mi problema es que cuando ejecuto me siguen apareciendo palabras vetadas y es ah donde no puedo o no entiendo como hacerlas desaparecer, ya que son palabras que no utilizare y están agregadas a mi archivo de palabras no utilizables, acá un ejemplo de la salida: (espero se entienda) Saludos y gracias.

Código (apache) [Seleccionar]
este es el campo rut R.U.T.
este es el campo rut VALOR
este es el campo rut CUOTAS
este es el campo rut DESCONTADAS
este es el campo rut ANTECEDENTES
este es el campo rut (-)
este es el campo rut TOTAL
este es el campo rut 1
este es el campo rut -
este es el campo rut
este es el campo rut
este es el campo rut 51/58
este es el campo rut 001
este es el campo rut 12.852.945-4
este es el campo rut 16.995.070-9
este es el campo rut 6.002.779-K
este es el campo rut 9.678.656-5
este es el campo rut 16.339.547-9
este es el campo rut 16.906.181-5
este es el campo rut SOLUCIONES
este es el campo rut FOLIO:
este es el campo rut OFICINA
este es el campo rut FOLIO
este es el campo rut CUOTA
este es el campo rut ANTICIPADAS
este es el campo rut DEL
este es el campo rut TOTAL
este es el campo rut TOTAL
este es el campo rut Firma
este es el campo rut 3
este es el campo rut
este es el campo rut -
este es el campo rut -
este es el campo rut 29.428.042
este es el campo rut 13.740.401-K
este es el campo rut 15.307.328-7
este es el campo rut 8.375.984-4
este es el campo rut 12.266.303-5
este es el campo rut 15.027.053-7
este es el campo rut 16.177.190-2
este es el campo rut 10.670.274-8
este es el campo rut DE
este es el campo rut Correspondiente
este es el campo rut R.U.T.
este es el campo rut VALOR
este es el campo rut CUOTAS
este es el campo rut DESCONTADAS
este es el campo rut ANTECEDENTES
este es el campo rut (-)
este es el campo rut TOTAL
este es el campo rut 1
este es el campo rut -
este es el campo rut
este es el campo rut
este es el campo rut 53/58
este es el campo rut 001
este es el campo rut 11.580.285-2
este es el campo rut 7.455.944-1
este es el campo rut 11.673.974-7
este es el campo rut 13.680.863-K
este es el campo rut 16.129.538-8
este es el campo rut 13.639.428-2
este es el campo rut SOLUCIONES
este es el campo rut FOLIO:
este es el campo rut OFICINA
este es el campo rut FOLIO
este es el campo rut CUOTA
este es el campo rut ANTICIPADAS
este es el campo rut DEL
este es el campo rut TOTAL
este es el campo rut TOTAL
este es el campo rut Firma
este es el campo rut 3
este es el campo rut
este es el campo rut -
este es el campo rut -
este es el campo rut 29.428.042
este es el campo rut 6.478.834-5
este es el campo rut 11.269.763-2
este es el campo rut 6.758.763-4
este es el campo rut 10.350.017-6
este es el campo rut 8.190.310-7
este es el campo rut 15.091.280-6
este es el campo rut 11.707.872-8
este es el campo rut DE
este es el campo rut Correspondiente
este es el campo rut R.U.T.
este es el campo rut VALOR
este es el campo rut CUOTAS
este es el campo rut DESCONTADAS
este es el campo rut ANTECEDENTES
este es el campo rut (-)
este es el campo rut TOTAL
este es el campo rut 1
este es el campo rut -
este es el campo rut
este es el campo rut
este es el campo rut 55/58
este es el campo rut 001
este es el campo rut 11.472.422-K
este es el campo rut 13.919.571-K
este es el campo rut 16.621.197-2
este es el campo rut 11.901.730-0
este es el campo rut 6.973.812-5
este es el campo rut 14.468.911-9
este es el campo rut SOLUCIONES
este es el campo rut FOLIO:
este es el campo rut OFICINA
este es el campo rut FOLIO
este es el campo rut CUOTA
este es el campo rut ANTICIPADAS
este es el campo rut DEL
este es el campo rut TOTAL
este es el campo rut TOTAL
este es el campo rut Firma
este es el campo rut 3
este es el campo rut
este es el campo rut -
este es el campo rut -
este es el campo rut 29.428.042
este es el campo rut 11.491.865-2
este es el campo rut 14.494.566-2
este es el campo rut 8.964.389-9
este es el campo rut 14.242.049-K
este es el campo rut 13.014.367-9
este es el campo rut 13.323.142-0
este es el campo rut 14.321.086-3
este es el campo rut DE
este es el campo rut Correspondiente
este es el campo rut R.U.T.
este es el campo rut VALOR
este es el campo rut CUOTAS
este es el campo rut DESCONTADAS
este es el campo rut ANTECEDENTES
este es el campo rut (-)
este es el campo rut TOTAL
este es el campo rut 1
este es el campo rut -
este es el campo rut
este es el campo rut
este es el campo rut 57/58
este es el campo rut 001
este es el campo rut 9.157.089-0
este es el campo rut 15.407.479-1
este es el campo rut 14.264.931-4
este es el campo rut 7.737.233-4



Pablo Videla

Prueba esto          

en vez de
Código (java) [Seleccionar]
e if(trash.get(i).toString().equalsIgnoreCase(linea)){

prueba con
Código (java) [Seleccionar]

if(trash.get(i).toString().contains(linea)){



or.gutierrez

Estimado, aun me arroja palabras vetadas sigue igual que el código que pegue mas arriba.


or.gutierrez

Algo voy avanzando, pero aun no logro sacar todas las palabras y cuando recorro el archivo me muestra registros saltados...  agradezco la ayuda. Saludos.

acá el código:

Código (javapublic class ComparaTxtPdf {

public void compararNominas() throws IOException{

String descptnFile  = "C:\\Log.txt";

File dirTxt = new File("C:\\NominasTxt\\");
String[) [Seleccionar]
nominasTxt = dirTxt.list();

File dirConver = new File("C:\\PDFconver\\");
String[] converTxt = dirConver.list();

PdfFile pdfPrueba = new PdfFile();

//for (int x=0;x<nominasTxt.length;x++){//SE RECORRE EL ARREGLO CON LOS NOMBRES DE ARCHIVO
            //String actualFile=("C:\\NominasTxt\\"+nominasTxt[x]);//SE ALMACENA LA RUTA DEL ARCHIVO A LEER.
           
            //no es necesario recorrer los pdf, ya que solo se necesita comparara el txt con los valores de las nominas que ya estan dentro de un fichero, se sugiere usar
            //hashmap para guardar los pdf
           
            for (int i=0;i<converTxt.length;i++){//SE RECORRE EL ARREGLO CON LOS NOMBRES DE ARCHIVO
            String expectedFile=("C:\\PDFconver\\"+converTxt[i]);

     try{
     // Crea los archivos leer archivo escribir archivo
     //FileReader actualFileReader  = new FileReader(actualFile);
     FileReader expctdFileReader  = new FileReader(expectedFile);
     FileWriter resultDesc = new FileWriter(descptnFile);

     //PRUEBA HASHMAP
     pdfPrueba.llenarArreglo("C:\\palabrasVetadas.txt");
     
     BufferedReader expcFileBufRdr = new BufferedReader(expctdFileReader);
     
     String rut, nombre;
     int folio, cuota, total_cuota, valor_cuota, total;
     
    while(expcFileBufRdr.ready()){
    //creo nuevo objeto de tipo record donde voy a guardar los valores de las variables
    Record record = new Record();
   
    if(!pdfPrueba.compararLinea(expcFileBufRdr.readLine()) && expcFileBufRdr.readLine()!=null){
    //System.out.println("Tamano Original " + pdfPrueba.getTrash().size());
//pdfPrueba.llenarArreglo("C:\\palabrasVetadas.txt");
//System.out.println("Tamano sin palabras vetadas " + pdfPrueba.getTrash().size());
   
    String[] campos = expcFileBufRdr.readLine().split(" ");
   
   
    for(int m = 0; m<campos.length; m++){
   
    System.out.println(campos[m]);
   
   

    }
   
   
    /*record.setCuota(1);
     record.setFolioCredito(1);
     record.setNombreDeudor("");
     record.setRutDeudor(campos[0]);
     record.setTotalCuotas(1);
     record.setTotalPagar(2);
     record.setValorCuota(2);*/
     
     //System.out.println(campos[0]);
     System.out.println("");
     
    }
     //pdfPrueba.getMapaRecords().put(record.getRutDeudor(), record);
         
     for(int a =0;a<pdfPrueba.getTrash().size();a++){
    //System.out.println("Palabras basuras : "+pdfPrueba.getTrash().get(a));
   
     }
    } 
     
     //FIN PRUEBA HASHMAP
     
     //Resto de codigo respaldado en mis documentos...
  }catch( FileNotFoundException e ){
             e.printStackTrace();
     }
}
}
}]


y aca el metodo que modifique para que considere las palabras vetadas
Código (java) [Seleccionar]
public Boolean compararLinea(String linea){
for(int i=0;i<trash.size();i++){
//if(trash.get(i).toString().equalsIgnoreCase(linea))
if(trash.get(i).toString().contains(linea))
{
return true;
}
}
return false;
}