Foro de elhacker.net

Programación => Java => Mensaje iniciado por: rpk666 en 14 Marzo 2011, 14:11 pm



Título: filtrar un TXT
Publicado por: rpk666 en 14 Marzo 2011, 14:11 pm
Hola, estoy haciendo un programa para procesar unos logs de los proxy que tengo.

lo que necesito ahora es saber como acomodar el log, para que quede mas prolijo y luego poder cargarlo en una tabla en el SQL.

este es el codigo que tengo para leer el log, pero no se como filtrarlo.

public class Main {
   
   
   public static void main(String[] args) throws IOException {
   
      File f = new File("c:/users/c319529/workspace/01032010.txt");
       BufferedReader entrada = new BufferedReader( new FileReader( f ) );
       if ( f.exists() )
         
          while ( entrada.readLine() != null){
             
             if (entrada.readLine().matches("DENIED"))
             {
                
             }else {
                System.out.println(entrada.readLine());
             }
             
          }
}
}


este codigo, me muetra por consola todo el archivo y yo necesito que las lineas que contengan TCP_DENIED las borre o no las muestre.

se le ocurre a alguien como hacerlo?

desde ya Muchas gracias!


Título: Re: filtrar un TXT
Publicado por: Valkyr en 14 Marzo 2011, 15:44 pm
Quizás con la clase Matcher y Pattern de java.util.Regex, en caso de que sepas usar expresiones regulares, te podría ir mejor. Haces un pattern con la expresión regular, lo compilas con el método de la clase compile() creo recordar que era, luego creas un Matcher y haces match con el texto del fichero, las lineas que encuentre las puedes sustituir por la cadena vacía o por algún otro texto...en fin hay muchos métodos echales un ojo  Paquete Regex Java (http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/package-summary.html).

Espero haberte servido de ayuda. Saludos.


Título: Re: filtrar un TXT
Publicado por: Debci en 14 Marzo 2011, 15:49 pm
Sin duda, como ya han dicho la forma mas fácil y correcta de hacerlo es con regex:

http://www.programacion.com/articulo/expresiones_regulares_en_java_127

Está bastante ameno y fácil de comprender.

Un saludo


Título: Re: filtrar un TXT
Publicado por: rpk666 en 15 Marzo 2011, 21:03 pm
señores agradezco su ayuda les dejo el codigo como quedo...

al final no use regular expresion, use una funcion que es "contains" que es de Strings.

   public void leerEInsertarEnSQL() {
      StringBuilder text = new StringBuilder();
      try {
         Scanner scanner = new Scanner(new File("/var/log/squid/access.log.0"));
         while (scanner.hasNextLine()) {
            String cadena = scanner.nextLine();
//            System.out.println(cadena);
            if(!cadena.contains("DENIED")){
            String[] campos = obtenerCampos(cadena);
//            System.out.println(campos[0]+" "+campos[2]+" "+campos[3].substring(1)+" "+campos[6]+" "+campos[9]+" "+campos[10]);
//            System.out.println(cadena);
            insertarBase(campos);
            }
         }
         scanner.close();

      } catch (Exception ex) {
         ex.toString();
      }
   }
   
   private void insertarBase(String[] campos) {
      Sql.getInstance().realizarInsert(campos);
   }

   public String[] obtenerCampos(String cadena) {
      return cadena.split("\\s");
   }
}


cualquier consulta que pueda responder, pregunten.

Saludos!


Título: Re: filtrar un TXT
Publicado por: xopito en 26 Marzo 2011, 11:54 am
No me he enterado bien de la estructura del fichero, pero si son varias palabras en la misma linea...¿no sería mejor hacerlo por Tokens?

por ejemplo:
nombreFichero = config.getNombreFichero();
        try {
            lectorFichero = new FileReader(nombreFichero);
        } catch (FileNotFoundException ex) {
            System.out.println("El fichero " + nombreFichero + " no ha sido encontrado");
            //Logger.getLogger(leer.class.getName()).log(Level.SEVERE, null, ex);
            return;
        }
        BufferedReader entrada;
        entrada = new BufferedReader(lectorFichero);
        //FileReader lector = new FileReader(config.getNombreFichero());
        //BufferedReader entrada = new BufferedReader(lector);
        String aux;
        String cadena;
        try {
            while ((aux = entrada.readLine()) != null) {
                if (aux.length() == 0) {
                    System.out.println("La linea esta vacia");
                } else if (aux.charAt(0) == '#') {
                    System.out.println("Es un comentario: " + aux);
                } else if (aux.charAt(0) == '@') {
                    System.out.println("Leida una linea del fichero");
                    aux = aux.substring(1);
                    aux = aux.toUpperCase();
                    tok1 = new StringTokenizer(aux);
                    cadena = tok1.nextToken();
                    if (cadena.equals("USARPIN")) {
                        nuevousarpin = tok1.nextToken();
...etc