ARQUIVO TEXTO em JAVA (Captura de Dados de uma determinada Coluna )

Boa tarde a Todos,

Estou com a seguinte dúvida:

Eu tenho um arquivo TXT dividido em colunas e preciso salvar algumas informações de uma determinada coluna deste arquivo e um segundo arquivo, pois a informação será sempre a mesma.

[b]Exemplo:

LALA LALA
LILI LILI
LOLO LOLO

Então, no exemplo acima, eu precisaria pegar da segunda coluna somente a informação LILI mas preciso que seja pego a linha inteira pois há outros dados de outras colunas ao lado dela que preciso salvar também.[/b]

Será que alguém poderia me ajudar ??

PS: Eu lembro que em VB existe uma opção chamada MID para que você obtenha linha e coluna, porém no java eu não conheço.

Muito Obrigado a todos,

Bruno.

Já tentou usar o método split da String? Ele retorna um array de acordo com o que você passa dentro do parametro que por sinal pode ser uma expressão regular… se os campos forem separados por TAB você pode fazer o split("\t") que retornará as colunas de uma linha

Ivan,

Então no caso, com este método split eu consigo passar uma palavra para que na hora da gravação do arquivo, seja colocado nele só as as linhas que na coluna específica tenham aquela palavra ?

Obrigado pela ajuda,

Bruno

O meu código é este:


package processararquivo;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
 *
 * @author Bruno
 */
public class Arquivo {
    
    private String arq_entrada;
    private String arq_saida;
    
    
       public Arquivo (String arq_entrada, String arq_saida){
           
           this.arq_entrada = arq_entrada;
           this.arq_saida = arq_saida;
           
       }
     

public void Processamento() {
    
   try{
    
   FileInputStream stream = new FileInputStream(arq_entrada);   
   InputStreamReader streamReader = new InputStreamReader(stream);   
   BufferedReader reader = new BufferedReader(streamReader);  
    
   
    FileWriter fileWriter = new FileWriter(arq_saida);   
    PrintWriter writer = new PrintWriter(fileWriter);  
    
    
    String line = null;   
        while((line=reader.readLine())!=null) {   
       
            String [] novaLinha = line.split("ABENDED");
            writer.println(novaLinha);

    }  
    
    writer.close();   
    fileWriter.close();   
    reader.close();   
    streamReader.close();   
    stream.close();  
   
    
   }catch (IOException x){
   }
       
}}


package processararquivo;

/**
 *
 * @author Bruno
 */
public class Principal {
 
    
       public static void main (String [] args){
           
           
      Arquivo arq = new Arquivo("Abend_HG.txt","HG_Abend.txt");
      {
      
          arq.Processamento();
          
          
      }

Porém devo estar fazendo alguma coisa errada, por que o arquivo de saída está ficando vazio.

Será que alguém poderia dar umas ideias ai ??

Mais uma vez obrigado,

Bruno

Não entendi, onde vc quer exibir a saída no console ou no arquivo

att.

HVivox,

Preciso salvar no arquivo, é assim:

Eu tenho um arquivo TXT cheio de informações e este arquivo está separado por colunas.

Preciso pegar todas as linhas que contenham uma determinada informação de uma determinada coluna e com isso salvar em um novo arquivo TXT.

será que consegui explicar melhor ?

Obrigado,

O split vai quebrar a coluna num separador. Então vamos supor que vc tenha a linha:
LALA LILI LOLO LULU

Um split nessa linha no " " irá retornar um array de strings, contendo:
String[0] = “LALA”;
String[1] = “LILI”;
String[2] = “LOLO”;
String[3] = “LULU”;

Outra coisa, a forma mais fácil de ler um arquivo linha-a-linha é através do Scanner.

Seu método processamento pode ficar assim:

public void processamento() { try { Scanner reader = new Scanner(arq_entrada); PrintWriter writer = new PrintWriter(new FileWriter(arq_saida)); while (reader.hasNextLines()) { String line = reader.nextLine(); if (line.contains("ABENDED")) { //Gravando só os dados da linha que contém "ABENDED" writer.println(line); } } reader.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); //Não ignore exceções! } }

Muito obrigado Vini…

Vou fazer desta forma que você explicou…

Agora só mais uma dúvida, este processo será executado com diversos arquivos que tem as mesmas informações, o que vai mudar é apenas a data de dentro do arquivo, como posso fazer para que seja lido todos os arquivos e as informações irem acumulando no mesmo novo arquivo criado ?

Att,

Bruno

Ou vc usa o mesmo PrintWriter para todos, ou vc passa true no segundo parâmetro do construtor do FileWriter.
Esse true significa que vc vai fazer “append” no arquivo.

Vini,

Mais uma vez, muito obrigado pela sua ajuda.

Porém, utilizando a sua dica para obter os dados que preciso de um arquivo e salvar no outro, o que está acontecendo é que o arquivo que receberá os dados está ficando vazio, e não tenho ideia do que pode estar acontecendo ?

Será que você poderia me ajudar em mais essa ??

Abs

Bruno

Tente fazer flush() antes de dar close nele. SE o problema persistir, poste seu código.

Vini,

Coloquei o flush conforme código abaixo, porém ele ainda está gerando o arquivo vazio.

package processamento_arq;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;


public class Arquivo {
    
    private String arq_entrada;
    private String arq_saida;
    
    
       public Arquivo (String arq_entrada, String arq_saida){
           
           this.arq_entrada = arq_entrada;
           this.arq_saida = arq_saida;
           
       }


public void processamento() {   
   try {   
      Scanner reader = new Scanner(arq_entrada);   
      PrintWriter writer = new PrintWriter(new FileWriter(arq_saida));   
      while (reader.hasNextLine()) {   
         String line = reader.nextLine();   
      
         if (line.contains("ABENDED")) { 
            writer.println(line);   
         }   
      }   
      writer.flush();
      reader.close();   
      writer.close();   
   } catch (IOException e) {   
   }   
}  


public class Processamento_Arq {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Arquivo arq = new Arquivo("Abend_HG.txt","HG_Abend.txt");
        
        arq.processamento();

       }
    }

Uma dúvida, eu tentei colocar o mesmo parãmetro que o seuFileWriter writer = new PrintWriter(new FileWriter(arq_saida)); , mas o Netbeans dá erro informando para alterar para PrinterWriter.
Tá faltando alguma coisa ?

valeu!!

E alguma das linhas contém a palavra ABENDED?

Já tentou rodar no depurador?

Tem sim, o arquivo esta desta forma:

@X @XKCTMHG 3077 08:00 08:00 @XKCRI01 FAILED- JCL ERROR 200411 200411
@X @XKCTMHG 3077 08:00 08:19 @XKCRI01 NOT CATLGD 2 ON DSNAME 200411 200411
AE AEBGD105 7819 08:12 08:16 AEBJD105 ABENDED CC U0158 200411 220411
AE AEBGD105 7881 08:16 08:16 AEBJD105 ABENDED CC U0158 200411 220411
AE AEBGD820 7885 08:17 08:17 AEBJD820 ABENDED CC S04C 200411 220411

Será que o nome tem que ser completo do ABENDED ou so uma parte dele já server ?

Só uma parte já deveria servir.

Você tem certeza que o java está conseguindo ver o arquivo de entrada? Pq nem sempre o caminho “.” dele é o que esperamos ser, especialmente se vc estiver rodando da IDE.

Entendi…

Vou fazer o seguiinte: Vou olhar novamente o código e tentar indentificar o problema.

Se funcionar, já posto aqui para seu conhecimento.

E valeu por toda sua ajuda…

E só mais uma coisa, como é que posso fazer para que o meu programa depois de funcionando certinho, possa pegar os dados do arquivo e inserir em uma planilha excel já criada, tipo assim, ele ira pegar o dados e adicionar na planilha na próxima linha disponível? tipo acumulando os dados ?

Abs

Vini,

Por favor, estou tentando usar o Eclipse, porém quando clico para executar esta ocorrendo erro e não executa o programa.

Você saberia me dizer como configurar corretamente as configurações do RUN ?

Obrigado

Vini,

Realmente vc estava com a razão, o arquivo não estava sendo encontrado, por isso que o arquivo estava sendo gerado vazio.

Agora tá tudo certinho…

Mas ainda fica pendente aquela parte do Excel…quando puder responder se possível, agradeço…

[]´s

Bruno

Pro excel vc precisa usar o Apache POI ou a JExcelAPI.