Pegar dados de colunas de um arquivo .txt

14 respostas
C

Bom dia Pessoal…

Primeiro de tudo sou novo em Java e ainda por cima sou estagiário…
Estou precisando pegar alguns dados de umas colunas de um arquivo .txt…

A primeira que é Data Hora, e as quatros ultimas, Usuário, Sistema, Ocioso e Espera I/O…

01/04/2010#01:00 1 3 0 16088 24400 5807660 0 0 16942 5225 1618 1516 35 6 17 42
01/04/2010#02:00 0 2 0 43712 22440 5821580 0 0 13319 5485 1696 1613 31 7 18 44
01/04/2010#03:00 1 2 0 44304 19680 5824340 0 0 13904 5809 1676 1637 33 7 18 41
01/04/2010#04:00 0 0 0 43088 40368 5817432 0 0 7232 1756 1133 281 4 1 83 11
01/04/2010#05:00 0 0 0 41888 55848 5807152 0 0 269 1746 1054 133 4 1 91 4
01/04/2010#06:00 1 0 0 15424 67104 5815136 0 0 5096 1754 1323 8167 17 7 49 26

Bom, para explicar um pouco melhor, esses dados dessas colunas vou gerar um gráfico em Java, mais como sou novato estou indo em etapas para essa tarefa…
Primeiro gostaria de saber qual a melhor maneira para pegar essas cinco coluna.
Fiz um codigo que pega essas colunas mais soh imprime na tela os dados…gostaria que alguem pudesse me dar uma direção em como pegar esses dados para depois mandar para um gerador de gráfico, que depois me manda um JavaMail, que jah esta pronto…

Esse eh o cogigo que eu fiz q imprime na tela…

package leitor;


    import java.io.*;
    import java.util.Random;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.BufferedReader;
    import java.io.PrintWriter;
    import java.io.IOException;


   public class Main{
       public static void main (String[] args) throws IOException{

           
           PrintWriter outputStream = null;
           BufferedReader inputStream = null;
   try {
           inputStream = new BufferedReader(new FileReader("C:\\associados\\vmstat.txt"));
           String linha ;

           while ((linha  = inputStream.readLine())!= null ){
            
           System.out.println(linha.substring(0,16));
           System.out.println(linha.substring(85,87));
           System.out.println(linha.substring(89,90));
           System.out.println(linha.substring(94,96));
           System.out.println(linha.substring(91,93));
           }

       }
           finally {
           if (inputStream != null) {
                   inputStream.close();
               }
           }
       }
   }

Muito obrigado a todos…

[color=red]Editado por Luca que NÃO concorda em hipótese alguma que um tópico pretenda ser mais importante do que todos os outros e apareça com URGENTÍSSIMO em maiúsculas no título. Aliás recomendo fortemente para que ninguém responda a quem faz isto. [/color]

14 Respostas

R

Olá amigo, para você pegar as colunas poderia utilizar Regex, é muito simples.

No caso pelo que eu percebi as colunas são separadas por " " (espaço em branco), então seu pattern poderia ser o seguinte, exemplo:

java.util.regex.Pattern pattern = Pattern.compile(" ");
String[] values = pattern.split("11111 222222 33333");
for(String value : values)
{
    System.out.println(value);
}

Resultado:

11111
222222
33333
M

E outra… se o tamanho das colunas forem fixos use o JFileHelper.

E por favor, titulo do topico explicativo por favor. Muita gente não entra só pelo “URGENTISSIMO - POR FAVOR”.

C

O tamanho naum eh sempre igual, varia de cliente para cliente

V

Cara, faça algo assim:

package br.com.masterfsaf.teste;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DataTeste {

	/**
	 * @param args
	 * @throws ParseException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws ParseException, IOException {
		
		  
		BufferedReader inputStream = null;
		String [] colunas = null;
		try {  
			inputStream = new BufferedReader(new FileReader("C:\\Documents and Settings\\viewtec\\Meus documentos\\Vinicius\\GUJ\\vmstat.txt"));  
			String linha ;  
			while ((linha  = inputStream.readLine())!= null ){  
				colunas = linha.split(" ");
				
				//aqui voce ira construir preencher seus objetos
				for(int k =0; k < colunas.length; k++){
					System.out.println(colunas[k]);
				}
				
				System.out.println("Data gerada: "+new SimpleDateFormat("dd/MM/yyyy#HH:mm").parse(colunas[0]));
			}
			
		}  
		finally {  
			if (inputStream != null) {  
				inputStream.close();  
			}  
		}  
	}  

	

}
C

Boa ajudou bem, mais minha maior duvida eh como pegar as colunas que eu quero, como falei em cima…Naum quero que traga toda elas, pois naum uso elas todas…apenas as que eu mencionei…Grato

M

Se a posição das colunas são sempre as mesmas voce pode fazer o split e pegar de acordo com o indice que voce quer.

C

Ninguém mais pode me ajudar??? :frowning:

M

Cabei de ajudar cara… o que voce quer? Código pronto?

C

Nem, eh que respondemos meio que junto…foi mal…to olhando

L

porque não cria uma rotina para gravar estes dados no Banco e depois gera os Graficos sempre pegando o ultimo registro ?

C

Não tem essa possibilidade, eh banco de clientes e muitas das vezes o acesso no paximo eh usando o putty e olha lah ainda…

M

Nossa agora que realmente li seu problema.

Voce deve pensar em orientação a objetos.
Criar um objeto que represente o dado que voce precise e guarde nele os valores das 5 colunas.
Depois voce pode usar o JChart se não me engano para gerar graficos.

C

Sim…isso msm Mark, mais estava com duvida em como pegar as colunas q eu quero…

M

da uma estudada no IReport…

não acho que alguém vai deixar isso mastigadinho para você, mas para criar gráficos normalmente é o mais indicado…

Criado 28 de abril de 2010
Ultima resposta 28 de abr. de 2010
Respostas 14
Participantes 6