Usar split e salvar num array list

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] =

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+

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?

[code]public List 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;

}[/code]

[quote=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?

[code]public List 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;

}[/code][/quote]

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:

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+

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)[code]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;[/code]Deve ser algo assim. Tenta aí e fala no que deu.

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

[quote=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[/quote]

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

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] = <CE>

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)

[code]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;
}

}
[/code]

[quote=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] = <CE>

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)

[code]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;
}

}
[/code]

[/quote]

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 :wink:

FELIZ 2012!!! 8)

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: