Ver Mensaje Individual
  #9 (permalink)  
Antiguo 03/03/2008, 22:45
oscarmoal
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Problemas con un listado en java

En verdad no se como lo logras, pero eres el mejor.

Lo que pusiste es justo lo que necesito, y prometo que saliendo de este compromiso, me meteré a estudiar java desesperadamente hasta volverme muy bueno. Quiero pedirte un último favor y prometo que no te molestaré más. Se trata de dos detalles más el primero es que los archivos de los cuales extraemos información tienen la siguiente configuración:

Código PHP:
0012090719420000001920000200041500104000000050100000010000290000000000000029000                    
0000001920000200032900101000000050100000100000035000000000000035000                    
0000001920000200026000101000000050100000100000260000000000000260000                    
0000001920000200081900101000000050100000100000091400000000000091400                    
0000001920000200082000101000000050100000100000056600000000000056600                    
0000001920000200071500101000000050100000100000043500000000000043500                    
0000000000000600000000000000000000000000000000000000000000000000000                    
0000000000000600000000000000000000000000000000000000000000000000000 
Y de acuerdo con lo que has hecho en el programa, lee la cadena de texto a partir de la segunda línea, lo que me gustaría que hiciera la función es que terminando de escribir la segunda línea hiciera un salto de línea y brincará a la tercera, y luego a la cuarta y así sucesivamente hasta acabar, es decir que los acomode de la siguiente forma.

Código PHP:
0200;721;0;1;0;00391;010000;
0200;828;0;1;0;00478;010000;
0200;833;0;1;0;00609;010000;
0200;788;0;1;0;00661;010000;
0200;663;0;1;0;05914;010000;
0600;000;0;0;0;00000;000000;
0600;000;0;0;0;00000;000000;
0200;224;0;1;0;00099;010000
Y finalmente tengo el siguiente problema, hay veces que voy a tener que leer archivos como b0000123.123, otras veces b1234000.123, b4560000.123, en el programa estamos fitrando todos los archivos que empiezan por la cadena "b0", y lo más sencillo sería filtar los archivos que empiecen por la letra "b", pero en ese directorio voy a tener otros archivos que empiezan por la letra b y que no deben ser modificados, hay alguna forma de asigar una variable que vaya del 0 al 9 y que pueda concatenarla con la cadena de filtrado, para que me tome la cadena "b" + algún valor numerico (del 0 al 9)?.

Nuevamente agardeciendo tu tiempo y todo el esfuerzo que has hecho para ayudarme, esto es lo último que te pido, lo prometo, espero que pronto nos podamos ver como dos colaboradores de foros como este y no solo como solicitantes, bueno en realidad ese es mi caso, jaja.

Mi correo es [email protected], se que muy poco podría yo aportar a tu conocimiento, pero el día que necesites algo y pueda yo ayudarte, no dudes en que lo haré.

Mil gracias por todo.

El código al final ha sido.

Código:
import java.io.*;

public class Ejemplo extends Thread {

    private boolean running = true;

    public Ejemplo() {
    }

    public void run() {
        String strFilter = "b0";
        String strFile = "c:/java";

        while (running) {
            nameFilter filter = new nameFilter(strFilter);
            findFiles(new File(strFile), filter);
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                running = false;
            }
        }
    }

    public static void main(String[] args) {
        new Ejemplo().start();
    }

    /**
     * Recoge todos los archivos del directorio que cumplan con la condición
     * @param file archivo inicial recursivo
     * @param filter filtro de nombres de archivo
     */
    public static void findFiles(File file, FileFilter filter) {
        if (file.isDirectory()) {
            File[] list = file.listFiles(filter);
            for (int i = 0; i < list.length; i++) {
                findFiles(list[i], filter);
            }
        } else {
            try {
                copyFile(file);
                file.delete(); // BORRA EL ARCHIVO O INTENTA BORRARLO
                System.out.println("Copiado exitósamente : " + file.getPath());
            } catch (Exception e) {
                System.out.println("Error en copia : " + file.getPath());
            }
        }
    }

    /**
     * Copia un fichero con un nuevo nombre
     * @param source fichero origen
     * @throws java.lang.Exception si ocurre un error de lectura o escritura
     */
    public static void copyFile(File source) throws Exception {
         String strNewName = "C:/java/toledo/MTL" + source.getName().substring(3, 8) + ".DAT";

        /**
         * BufferedInputStream/BufferedOutputStream :  para caracteres
         * BufferedReader/BufferedWriter : para strings
         */
        BufferedReader in = new BufferedReader(new FileReader(source));
        BufferedWriter out = new BufferedWriter(new FileWriter(strNewName));

        /**
         * Lee una linea por adelantado y la descarta.
         */
        String s = in.readLine();
        if (s != null) {
            while ((s = in.readLine()) != null) {
                /**
                 * Da formato a la linea leida y la escribe en la salida.
                 */
                out.write(plstbuilder(s));
            }
        }

        out.close();
        in.close();
    }

    /**
     * Da formato a str
     * @param str la cadena a dar formato
     * @return la cadena original con un nuevo formato
     */

    public static String plstbuilder(String str) {
        String plstrow = null;
        String plu, depto, precio, tipo, t, cad, desc, walo;

        plu = str.substring(12, 16);
        depto = str.substring(17, 20);
        precio = str.substring(33, 39);
        t = str.substring(39, 46);

        if (t.equals("0000000")) {
            tipo = "0";
        } else {
            tipo = "1";
        }

        cad = str.substring(54, 55);
        desc = str.substring(60, 65);
        walo = "0";

        plstrow = plu + ";" + depto + ";" + walo + ";" + tipo + ";" + cad + ";" + desc + ";" + precio + ";";

        return plstrow;
    }

    private class nameFilter implements FileFilter {

        private String mask;

        nameFilter(String mask) {
            this.mask = mask;
        }

        public boolean accept(File file) {
            return file.getName().startsWith(mask);
        }
    }
}