Modificacion de un txt

Iniciado por mrojasl, 11 Marzo 2015, 00:21 AM

0 Miembros y 1 Visitante están viendo este tema.

mrojasl

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.


Usuario Invitado

#1
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 (java) [Seleccionar]
public void replaceTabsWithZeros(String path) {
    try (
BufferedReader reader = new BufferedReader(new FileReader(path));
BufferedWriter writer = new BufferedWriter(new FileWriter(path))) {
    String line;
    while( (line = reader.readLine()) != null) {
        writer.write(line.replaceAll("    ","0000"));
    }
} catch(IOException ex) {
    throw new RuntimeException("Pro lema al leer archivo: "+ex.getMessage());
}
}


Cualquier error, excúsame, estoy publicando desde mi móvil :xD
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

mrojasl

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.

PabloPbl

#3
Modifique un poco el código de Gus y funciona perfectamente para lo que quieres:

Código (java) [Seleccionar]
package remplace;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Remplace {

   public Remplace() {
       File file = new File("Archivo.txt");
       if(!(file.exists())) {
           try {
               file.createNewFile();
               System.out.println("Se ha creado el archivo");
           } catch (IOException ex) {
               System.out.println("Se ha producido un problema "+ex.getMessage());
           }
       }
       replaceTabsWithZeros("Archivo.txt");
   }

   public void replaceTabsWithZeros(String path) {
   try {
       BufferedReader reader = new BufferedReader(new FileReader(path));
       String TextFinal = "";
       String aux = "";
       while(true) {
           aux = reader.readLine();
           if(aux != null) {
               TextFinal += aux.replaceAll(" ", "0")+"\n";
           }
           else{
               break;
           }
       }
       
       reader.close();
       
       BufferedWriter writer = new BufferedWriter(new FileWriter(path));
       writer.write(TextFinal);
       writer.close();
   
   } catch(IOException ex) {
System.out.println("Se ha producido un problema "+ex.getMessage());
   }
}
   
   public static void main(String[] args) {
       Remplace rem = new Remplace();
   }
   
}


Salu2  ;).

Usuario Invitado

#4
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 (java) [Seleccionar]
public void replaceTabsWithZeros(File file) {
        if(file.exists()) {
            try (
                 BufferedReader reader = new BufferedReader(new FileReader(file))) {
                List<String> newLines = new ArrayList<>();
                String line = "";
                while( (line = reader.readLine()) != null) {
                    System.out.println("Linea actual:\t"+line);
                    String newLine = line.replaceAll("\t", "0000");
                    System.out.println("Linea formateada: "+newLine);
                    newLines.add(newLine);
                }
                replaceLines(file, newLines);
            } catch(IOException ex) {
                throw new RuntimeException(ex.getMessage());
            }
        }
    }
   
    public void replaceLines(File file, List<String> lines) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            for(String line : lines) {
                writer.write(line);
                writer.newLine();
                writer.flush();
            }
        } catch (IOException ex) {
            new RuntimeException(ex.getMessage());
        }
           
    }


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

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


Ejemplo de salida:

A0000B0000C0000D0000E
F0000G0000H0000I0000J
K0000L0000M0000N0000O
P0000Q0000R0000S0000T
U0000V0000W0000X0000Y
Z
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

mrojasl

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,

Usuario Invitado

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 (java) [Seleccionar]
String newLine = line.replaceAll(line.substring(50,60), "Texto a cambiar");
writer.write(line);
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

mrojasl

Ok, Habia dejado este tema tanto tiempo que me habia olvidado de los funciones de texto.

Muchas Gracias Por su ayuda.

Saludos.