Usar split e salvar num array list

10 respostas
S

Preciso ler esse arquivo e usar o split apos // e entre os [] <> e salvar num arraylist…alguem me ajuda?Obgdo.Boas FEstas

(**** PARAMETROS DE CONFIGURAÇÃO GERAL DO SISTEMA ****)
// DEFINE O EXERCÍCIO CORRENTE
[PA_EXERC] = <2011>

// DEFINE A UNIDADE FEDERATIVA DA LOJA
[UF] =

// DEFINE A CIDADE DA LOJA
[CIDADE] =

// DEFINE SE O SISTEMA SISIF ESTA ATIVO NO MOMENTO
[SISIF] =

10 Respostas

A

cara,

com split vai ficar confuso seu codigo, é mais facil vc ler o arquivo linha por linha e usar expressao regular para verificar o que vc quer.

t+

jaboot

Sa1617-03,

O que eu te recomendo é fazer as coisas por partes. Vamos lá que o pessoal daqui ajuda.
Você já está lendo o arquivo linha a linha? Se ainda não, faça isso primeiro, é o básico.
Depois a gente pensa como vai fazer o lance dos // e <>

Edit: Bônus hein?
public List<String> abreArquivo() {

	List<String> linhas = Lists.newArrayList();

	try {
		BufferedReader leitor = new BufferedReader(new FileReader("caminho\\do\\meu\\arquivo.txt"));

		String linha = leitor.readLine();

		while (linha != null) {
			linhas.add(linha);
			linha = leitor.readLine();
			System.out.println(linha);
		}

		leitor.close();

	} catch (FileNotFoundException ex) {
		System.out.println("Erro: " + ex);
	} catch (IOException ex) {
		System.out.println("Erro: " + ex);
	}

	return linhas;
}
S
jaboot:
Sa1617-03,

O que eu te recomendo é fazer as coisas por partes. Vamos lá que o pessoal daqui ajuda.
Você já está lendo o arquivo linha a linha? Se ainda não, faça isso primeiro, é o básico.
Depois a gente pensa como vai fazer o lance dos // e <>

Edit: Bônus hein?
public List<String> abreArquivo() {

	List<String> linhas = Lists.newArrayList();

	try {
		BufferedReader leitor = new BufferedReader(new FileReader("caminho\\do\\meu\\arquivo.txt"));

		String linha = leitor.readLine();

		while (linha != null) {
			linhas.add(linha);
			linha = leitor.readLine();
			System.out.println(linha);
		}

		leitor.close();

	} catch (FileNotFoundException ex) {
		System.out.println("Erro: " + ex);
	} catch (IOException ex) {
		System.out.println("Erro: " + ex);
	}

	return linhas;
}

SIM Jaboot,o basico eu consigo fazer,ler o arquivo,pegar o tamanho.Eu so queria instruçao de boa pratica para separar essas partes,
ja que split eh ruim pensei q talvez com subtring..oq vcs do FORUM acham?e vc Jaboot?Valeu pela atençao
:wink:

A

cara,

complementando o codigo do nosso amigo, vc pode usar expressao regular para validar qual tipo de linha vc vai tratar e depois é so replaceall para retirar da string // [ ] < >

t+

jaboot

Cara, te falar que não existem muitas boas práticas ou algum design pattern mágico pra te salvar não. O lance é mesmo fazer na unha.

O que eu costumo utilizar SEMPRE que vou trabalhar com Strings é a biblioteca StringUtils da apache. Ajuda bastante.

O que te recomendo a fazer PORTUGOLMENTE falando:

Ler o arquivo, gravar TODAS as linhas em um arrayList de Strings (aquele método já faz isso)
Loop até acabar as linhas
    
    Se linha diferente de vazio ou nulo (!isBlank) Então

        Se linha começar com // Então
            chama o método que trata linhas desta forma
        Fim se;

        Se linha começar com [ Então
            String primeiraParte = StringUtils.substringBetween(linha, "[", "]")
            String segundaParte = StringUtils.substringBetween(linha, "<", ">")
        Fim Se;
    Fim Se;

Fim Loop;
Deve ser algo assim. Tenta aí e fala no que deu.
jaboot

E outra, não dá pra usar direito o split. Ele é mais utilizado quando você tem separadores em comum. Por exemplo:

palavra:palavra:palavra:palavra - Aqui sim daria sossegado pra dar um split por :

Mas no teu caso, tem separadores [] e <>, o que não vai ficar nem um pouco legal usar o split. Entendeu?

Abração

S

jaboot:
E outra, não dá pra usar direito o split. Ele é mais utilizado quando você tem separadores em comum. Por exemplo:

palavra:palavra:palavra:palavra - Aqui sim daria sossegado pra dar um split por :

Mas no teu caso, tem separadores [] e <>, o que não vai ficar nem um pouco legal usar o split. Entendeu?

Abração

ENTENDI,ia ficar muito complicado um embolo…muito obrigado ,qualquer coisa eu volto a perguntar pro forum.VALEU!!!

S

GALERA TO QUASE Lá,só me falta uma coisa,capturar o que esta entre [] ,que é o argumento e armazenar no ArrayList
consigo com descriçao "//" ( oque ve depois de 2 barras) e com parametro que é oque está entre < > ,o que falta é a logica para parar a leitura da linha no colchete pra esquerda ( ] )

ex: // DEFINE O EXERCÍCIO CORRENTE
[ PA_EXERC] = <2011>

// DEFINE A UNIDADE FEDERATIVA DA LOJA
[UF] =

o que o script abaixo faz em argumento é:

o comando é o System.out.println("ArrayList argumento:" + argumento);

ArrayList argumento: [ PA_EXERC ] = <2011> ]

eu queria ajuda pra ficar assim:

ArrayList argumento: [ PA_EXERC ]

OBRIGADO A TODOS AEW,FELIZ ANO NOVO!! 8)

package leitura;



import java.io.*;

import java.util.ArrayList;

import javax.swing.JOptionPane;


public class lendoArquivo {

	public ArrayList<String> abreArquivo() {

		//List<String> linhas = List.newArrayList();
		ArrayList<String> linhas = new ArrayList<String>();
		ArrayList<String> descricao = new ArrayList<String>();
		ArrayList<String> parametro = new ArrayList<String>();
		ArrayList<String> argumento = new ArrayList<String>();
		try {
			BufferedReader leitor = new BufferedReader(new FileReader("K:\\ESTAGIO\\paramTeste.CFG"));

			String linha = leitor.readLine();

			//loop para ler as linhas do arquivo
			while (linha != null) {
				linhas.add(linha);
				linha = leitor.readLine();
				System.out.println(linha);

				int contador = linha.length();  
				for(int i = 0;i<contador;i++)
				{  

					if (linha.substring(0,i+1).equals("//"))
					{  
						int posicao = i+1;  
						JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - //",1);
						descricao.add(linha.substring(i+1));

						System.out.println("ArrayList descriçao : " + descricao);

					} 

					else{
						if(linha.substring(i,i+1).equals("<"))
						{  
							int posicao = i+1;  
							JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - <",1); 
							parametro.add(linha.substring(i+1,(contador -1)));


							System.out.println("ArrayList parametro:" + parametro);
						}

					}   	 
					if(linha.substring(i,i+1).equals("["))
					{  

						int posicao = i+1;  
						JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - [",1);  

						argumento.add(linha.substring(i+1));
						//logica do ponto final do substring errada para o argumento
						System.out.println("ArrayList argumento:" + argumento);

					}


				}  

			}//for


			leitor.close();
		}

		catch (IOException ex) {
			System.out.println("Erro: " + ex);
		}

		return linhas;
	}
}
S
Sa1617-03:
GALERA TO QUASE Lá,só me falta uma coisa,capturar o que esta entre [] ,que é o argumento e armazenar no ArrayList consigo com descriçao "//" ( oque ve depois de 2 barras) e com parametro que é oque está entre < > ,o que falta é a logica para parar a leitura da linha no colchete pra esquerda ( ] )

ex: // DEFINE O EXERCÍCIO CORRENTE
[ PA_EXERC] = <2011>

// DEFINE A UNIDADE FEDERATIVA DA LOJA
[UF] =

o que o script abaixo faz em argumento é:

o comando é o System.out.println("ArrayList argumento:" + argumento);

ArrayList argumento: [ PA_EXERC ] = <2011> ]

eu queria ajuda pra ficar assim:

ArrayList argumento: [ PA_EXERC ]

OBRIGADO A TODOS AEW,FELIZ ANO NOVO!! 8)

package leitura;



import java.io.*;

import java.util.ArrayList;

import javax.swing.JOptionPane;


public class lendoArquivo {

	public ArrayList<String> abreArquivo() {

		//List<String> linhas = List.newArrayList();
		ArrayList<String> linhas = new ArrayList<String>();
		ArrayList<String> descricao = new ArrayList<String>();
		ArrayList<String> parametro = new ArrayList<String>();
		ArrayList<String> argumento = new ArrayList<String>();
		try {
			BufferedReader leitor = new BufferedReader(new FileReader("K:\\ESTAGIO\\paramTeste.CFG"));

			String linha = leitor.readLine();

			//loop para ler as linhas do arquivo
			while (linha != null) {
				linhas.add(linha);
				linha = leitor.readLine();
				System.out.println(linha);

				int contador = linha.length();  
				for(int i = 0;i<contador;i++)
				{  

					if (linha.substring(0,i+1).equals("//"))
					{  
						int posicao = i+1;  
						JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - //",1);
						descricao.add(linha.substring(i+1));

						System.out.println("ArrayList descriçao : " + descricao);

					} 

					else{
						if(linha.substring(i,i+1).equals("<"))
						{  
							int posicao = i+1;  
							JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - <",1); 
							parametro.add(linha.substring(i+1,(contador -1)));


							System.out.println("ArrayList parametro:" + parametro);
						}

					}   	 
					if(linha.substring(i,i+1).equals("["))
					{  

						int posicao = i+1;  
						JOptionPane.showMessageDialog(null,"Está na posição " + posicao ,"TITULO - [",1);  

						argumento.add(linha.substring(i+1));
						//logica do ponto final do substring errada para o argumento
						System.out.println("ArrayList argumento:" + argumento);

					}


				}  

			}//for


			leitor.close();
		}

		catch (IOException ex) {
			System.out.println("Erro: " + ex);
		}

		return linhas;
	}
}

EI POVO...CONSEGUI AQUI =) USEI UM INDEX OF ; )

argumento.add(linha.substring(i+1,linha.indexOf("]")));
//logica do ponto final do substring errada para o argumento
System.out.println("ArrayList argumento:" + argumento);

deu certo uhuuuu....espero ajudar alguem futuramente ;)

FELIZ 2012!!!! 8)

gqferreira

Quase respondi o seu tópico… quando o tópico for solucionado, renomeie o titulo e acrescente [RESOLVIDO] para facilitar pro pessoal que tenta ajudar, assim não perde tempo lendo todo o desenrolar do tópico pra depois descobrir que já foi solucionado…

Boas festas! :smiley:

Criado 20 de dezembro de 2011
Ultima resposta 28 de dez. de 2011
Respostas 10
Participantes 4