style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Buscador de texto plano

Que onda ya ando de nuevo por aca:

Les comparto está pequeña utilidad que hice hace un par de días devido a la necesidad que me surgio de buscar una cadena de texto, en el contenido de varios archivos, no es nada nuevo, y se puede hacer mediante comandos, sin embargo aveces y para algunos es mucho mas facil tener una aplicación intuitiva que nos ayude...

Copio el post directo de G+

Buscador

Acabo de terminar un programita sencillo en java, que es util para buscar cadenas en archivos el cual tiene las siguientes caracteristicas:

1.-Recibe los siguientes parametros:
-Criterio de busqueda (el texto que buscara en el archivo)
-Directorio(la ruta desde donde empezara a buscar, es recursivo por lo que inlcuira las subcarpetas)
-Extensión (la extensión de los archivos donde buscara, p.j. .java .txt)

2.- No distingue entre mayusculas y minusculas de tal manera que los criterios de busqueda: "contenido que busco" y "Contenido Que Busco" y "CONTENIDO QUE BUSCO" , etc , los toma como si fueran iguales.

3.- Como salida te muestra la ruta completa y el nombre del archivo donde se obtuvo coincidencias..

Comentarios:

hice las pruebas necesarias y funciona de maravilla, muy util para los que programamos y nos toca corregir algo en algun archivo de donde lo unico que sabes es que en la pantalla dice "Reporte de Tal" bueno tomas el programita, escribes la frace en criterio, le das la ruta de donde estan todos los archivos dl proyecto, le especificas una extencion p.ej. ".java" y le das buscar es todo..

Ahorita busque una frase en una carpeta de 1.40 gb apx de tamaño y se tardo poco menos de 3 minutos pero si me dio el archivo... el editor del lenguaje Genero, tambien trae esta opción (lo que hace el programa) pero hice la misma busqueda y me encontro el mismo resultado que mi programa pero en poco mas de tres minutos y me trajo basura (buscaba en todos los archivos aunque no me interese) y en ocaciones, el editor se quedaba atorado y windows me tronaba el proceso.

Mi programita tambien se pasmo unos segundos pero luego luego respondio creo que se puede mejorar dejando la busqueda a un hilo mientras se pone una animación o algo que indique que esta buscando, pero como les digo, eso es cuando se busca en carpetas de un gran tamaño.

Por ultimo todo se puede mejorar, solo que para mi en estos momentos es lo que requiero..

¿les gustaria probarlo?
el codigo fuente esta en: https://gist.github.com/1095949

espero cualquier comentario o sugerencia.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Shadonwk

al codigo que ya habia subido

al codigo que ya habia subido a github le agregue este método:

public String utilizandoLinux(String criterio, String directorio, String tipoArchivo){

        String line = null;
        String comando="grep -in \"" + criterio + "\" */*"+ tipoArchivo;
        File wd = new File(directorio);
        StringBuilder salida = new StringBuilder();

        try{
            //Process p = Runtime.getRuntime().exec("grep -in \"Menu_ordna\" */*.4gl",null, wd);
            Process p = Runtime.getRuntime().exec(comando,null, wd);
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            System.out.println("Recibiendo lo de la consola. . . . ");
            while ((line = in.readLine()) != null) {
                System.out.println(line);
                salida.append(line);
                salida.append(System.getProperty("line.separator"));
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Termino el proceso...");
        salida.append("Termino la busqueda...");
        return salida.toString();
    }

y luego a la llamada del boton buscar sustitui la linea por:

cmdBuscar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                buscarCadenas = new BuscaCadenaEnArchivos();
                //resultados.setText( buscarCadenas.buscar(txtCriterio.getText(),txtDirectorio.getText(),txtTipoArchivo.getText()));
                resultados.setText(buscarCadenas.utilizandoLinux(txtCriterio.getText(),txtDirectorio.getText(),txtTipoArchivo.getText()));
            }
        });

esos fueron los cambios importantes, otros fueron hacer mas grande la ventana, ponerle un scroll al área de texto.

para que puedan correr el comando linux en windows es necesario tener una carpetita con algunos comandos linux mas, y luego agregar la ruta al path.

realmente al usar este comando las busquedas que tardan 3 min apx (como menciono arriba) bajaron a solo segundos...

por ultimo si alguien que usa windows quiere probarlo comenten para que suba el jar y la carpeta de comandos linux.

Saludos.

Lo que estaba buscando

Tu aplicación está genial.

Necesito averiguar las frecuencias de aparición de cadenas formadas por una, dos y tres letras, en ciertos textos. Las búsquedas de cadenas de una letra (27 variaciones) y dos letras (702 variaciones) las hice manualmente con la opción búsqueda del procesador de texto, no me quedó de otra, pero las variaciones de 3 letras son 17550, son demasiadas.

Hice tres ligeras modificaciones a un código que publicó el sr. bferro, para que cree un archivo Variaciones.txt con las variaciones sin repetición que se pueden formar a partir de las 27 letras del alfabeto español tomando los elementos de de 3 en 3. Me quedó así:

import java.io.*;
 
public class escribeEnArchivo{
    public static void main(String[] args)    {

        FileWriter fichero = null;
        PrintWriter pw = null;
        try
        {
                //   ***Aquí hice la primera modificación.
                String vec[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","ñ","o","p","q","r","s","t","u","v","w","x","y","z"};
                int c=0;
                //Aquí cambié el nombre del archivo, vaya colosal hazaña.
                fichero = new FileWriter("Variaciones.txt");
            pw = new PrintWriter(fichero);
 
            //   ***Agregué 3 sentencias For anidadas para generar las variaciones. Lo adapté de un tutorial de youtube.
                for (int i=0; i <vec.length; i++){
                        for (int j=0; j <vec.length; j++){
                                for (int k=0; k <vec.length; k++){
                                        if(i!=j&&j!=k&&k!=i){
                                                c++;
                                    pw.println(vec[i]+vec[j]+vec[k]);
                                        }
                                }
                        }
                }
            //   ***Muestra en consola un mensaje con el número de variaciones que se generaron.
                System.out.println("Se generaron "+c+"\nvariaciones sin repetición.");
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para
           // asegurarnos que se cierra el fichero.
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }
}

Ciertamente no es lo mejor de lo mejor (lo ideal sería que solicite al usuario ingresar la lista o archivo.txt con los elementos a partir de los cuales formara las variaciones) pero así como está me sirve para salvar la situación.

Luego encontré este aplicación tuya, la cual es prácticamente lo que necesito, pero no consigo hacerla correr en mi pc.

Cuando ejecuto me advierte de algunos errores, le doy continuar y se carga la interfase, hasta aquí todo va bien (al parecer), ingreso el "Criterio de búsqueda", pero al darle buscar saltan un montón de errores por doquier ¿serán conflictos por versiones diferentes?

Mi idea es modificar tu código para que "Criterio de búsqueda" sea la lista de variaciones; "Buscar en" y "Tipo de archvo" permanecerían igual, así puedo buscar en varios textos a la vez.

Si bien hace muchos años (en los 90's) llevé cursos de Visual Fox Pro y Visual Basic, no soy programador, pero logro hacer algunas cosas sencillas.

Tal vez me puedas dar indicaciones de cómo hacer lo que necesito o comentar tu código para que me sea más descifrarlo y por ende modificarlo.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">