Foro de elhacker.net

Programación => Java => Mensaje iniciado por: mrojasl en 11 Marzo 2015, 00:21 am



Título: Modificacion de un txt
Publicado por: mrojasl en 11 Marzo 2015, 00:21 am
Buen dia:

He iniciado a hacer un pequeño programa para modificar datos dentro de un txt. Hasta ahora solo he conseguido cargar el archivo de texto y recorrer las lineas que tiene el archivo, pero el modificar cada campo aun no. Lo complicado para mi es que el archivo esta separado por tabulaciones, por ejemplo
Citar
1          2          3          4          5

y lo que necesito es que este así:
Citar
0001       0002       0003       0004       0005

osea la idea es llenar espacios vacios por 0 u otro digito.

Por Favor necesito su ayuda.



Título: Re: Modificacion de un txt
Publicado por: Usuario Invitado en 11 Marzo 2015, 00:55 am
Lee linea por linea y reemplaza los tabs por ceros. Aquí tendrás que saber cuántos espacios corresponden a un tab en el editor donde se creó el fichero y reemplazarlos con el método replaceAll. Ejemplo:

Código
  1. public void replaceTabsWithZeros(String path) {
  2.    try (
  3. BufferedReader reader = new BufferedReader(new FileReader(path));
  4. BufferedWriter writer = new BufferedWriter(new FileWriter(path))) {
  5.    String line;
  6.    while( (line = reader.readLine()) != null) {
  7.        writer.write(line.replaceAll("    ","0000"));
  8.    }
  9. } catch(IOException ex) {
  10.    throw new RuntimeException("Pro lema al leer archivo: "+ex.getMessage());
  11. }
  12. }

Cualquier error, excúsame, estoy publicando desde mi móvil :xD


Título: Re: Modificacion de un txt
Publicado por: mrojasl en 11 Marzo 2015, 16:01 pm
Estimado Gus Garsaky:

Gracias por tu respuesta.

He estado provando el codigo que me propusiste pero lo que me hace es borrar todo el contenido del txt.

Saludos.


Título: Re: Modificacion de un txt
Publicado por: PabloPbl en 11 Marzo 2015, 18:50 pm
Modifique un poco el código de Gus y funciona perfectamente para lo que quieres:

Código
  1. package remplace;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9.  
  10. public class Remplace {
  11.  
  12.    public Remplace() {
  13.        File file = new File("Archivo.txt");
  14.        if(!(file.exists())) {
  15.            try {
  16.                file.createNewFile();
  17.                System.out.println("Se ha creado el archivo");
  18.            } catch (IOException ex) {
  19.                System.out.println("Se ha producido un problema "+ex.getMessage());
  20.            }
  21.        }
  22.        replaceTabsWithZeros("Archivo.txt");
  23.    }
  24.  
  25.    public void replaceTabsWithZeros(String path) {
  26.    try {
  27.        BufferedReader reader = new BufferedReader(new FileReader(path));
  28.        String TextFinal = "";
  29.        String aux = "";
  30.        while(true) {
  31.            aux = reader.readLine();
  32.            if(aux != null) {
  33.                TextFinal += aux.replaceAll(" ", "0")+"\n";
  34.            }
  35.            else{
  36.                break;
  37.            }
  38.        }
  39.  
  40.        reader.close();
  41.  
  42.        BufferedWriter writer = new BufferedWriter(new FileWriter(path));
  43.        writer.write(TextFinal);
  44.        writer.close();
  45.  
  46.    } catch(IOException ex) {
  47. System.out.println("Se ha producido un problema "+ex.getMessage());
  48.    }
  49. }
  50.  
  51.    public static void main(String[] args) {
  52.        Remplace rem = new Remplace();
  53.    }
  54.  
  55. }

Salu2  ;).


Título: Re: Modificacion de un txt
Publicado por: Usuario Invitado en 11 Marzo 2015, 19:31 pm
Sí, fue un error. Lo que pasa es que al cargar el mismo archivo en el BufferedReader nunca leía el archivo porque estaba a la espera de escribir. Aquí te dejo la solución, pero, a la próxima, anda intentado hacerlo tu.

Código
  1. public void replaceTabsWithZeros(File file) {
  2.        if(file.exists()) {
  3.            try (
  4.                 BufferedReader reader = new BufferedReader(new FileReader(file))) {
  5.                List<String> newLines = new ArrayList<>();
  6.                String line = "";
  7.                while( (line = reader.readLine()) != null) {
  8.                    System.out.println("Linea actual:\t"+line);
  9.                    String newLine = line.replaceAll("\t", "0000");
  10.                    System.out.println("Linea formateada: "+newLine);
  11.                    newLines.add(newLine);
  12.                }
  13.                replaceLines(file, newLines);
  14.            } catch(IOException ex) {
  15.                throw new RuntimeException(ex.getMessage());
  16.            }
  17.        }
  18.    }
  19.  
  20.    public void replaceLines(File file, List<String> lines) {
  21.        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
  22.            for(String line : lines) {
  23.                writer.write(line);
  24.                writer.newLine();
  25.                writer.flush();
  26.            }
  27.        } catch (IOException ex) {
  28.            new RuntimeException(ex.getMessage());
  29.        }
  30.  
  31.    }

Llamas al método replaceTabsWithZeros pasándole un objeto File con la ruta del archivo:

Código
  1. public static void main(String[] args) {
  2.        TabsTest tabTest = new TabsTest();
  3.        tabTest.replaceTabsWithZeros(new File("D://test.txt"));
  4.    }

Ejemplo de salida:

Código:
A0000B0000C0000D0000E
F0000G0000H0000I0000J
K0000L0000M0000N0000O
P0000Q0000R0000S0000T
U0000V0000W0000X0000Y
Z


Título: Re: Modificacion de un txt
Publicado por: mrojasl en 11 Marzo 2015, 22:25 pm
Perfecto Gracias. Ya Pude editarlo ahora solo un ultimo favor.
Como podria insertar un digito en un lugar en especifico de una linea, por ejemplo en la posicion 50.

Saludos,


Título: Re: Modificacion de un txt
Publicado por: Usuario Invitado en 11 Marzo 2015, 22:47 pm
Extraes la porción de cadena a cambiar con el método substring(int start, int end), que devuelve un subcadena de una cadena dentro de las posiciones especificadas. Luego lo reemplazas, algo así:

Código
  1. String newLine = line.replaceAll(line.substring(50,60), "Texto a cambiar");
  2. writer.write(line);


Título: Re: Modificacion de un txt
Publicado por: mrojasl en 12 Marzo 2015, 17:03 pm
Ok, Habia dejado este tema tanto tiempo que me habia olvidado de los funciones de texto.

Muchas Gracias Por su ayuda.

Saludos.