2 perguntas: token e saída

4 respostas
A

Olá, povão do pj.
Bom, ainda tô estudando java e tô com umas dúvidas aqui e preciso de ajuda. Acho que é coisa fútil, mas lá vai: preciso fazer a leitura de um arquivo .txt que tem o seguinte padrão de texto:
dado1 dado2 =>com 1 ou dois espaçamentos…
dado1 dado2
… …
Beleza, eu tô usando o tokenizer, mas preciso analizar os dados linha a linha para trabalhar com o dado1 e o dado2 e não tudo de uma vez como tá rolando… a pergunta é: Como faço pra separar linha a linha?

Certo, a segunda dúvida: Agora o inverso… como crio um arquivo .txt com o seguinte padrão:

frase1: N1
frase2: N2
frase3: N3 frase4: N4

Mais ou menos assim… Tô estudando o fileWriter mas não ajudou muito até agora, por isso estou recorrendo ao fórum… eu não sei como “modelar” o arquivo pra que ele fique daquele formato lá do exemplo que dei…

http://acm.uva.es/problemset/ <=site com alguns problemas… bom para estudar…

4 Respostas

B

Olá An, blz, seguinte em relação a 2 dúvida é bem simples, é só você escrever no arquivo um String +/- assim : String s = "frase1: N1 \nfrase2: N2\nfrase3: N3 frase4: N4";

Isto eu não sei se a fileWriter escreve em alto nível, por exemplo, ter um write(String s), bom mas este exemplo serve para a java.io.RandomAccessFile, que é bem simples para usar.

Na dúvida 1 tenho a seguinte opiniõe:

  • usando o java.io.RandomAccessFile seria assim
//r é um java.io.RandomAccessFile
StringTokenizer stk = new StringTokenizer(r.readLine()," ");
A
Carinha, valeu pela ajuda. A saída eu sabia que podia ser daquela forma, só estava receoso se realmente ia gerar o .txt do jeito que queria. Bom, essa parte já matei. Agora qto à outra dúvida, tava tentando usar o RandomAccessFile, mas não saquei como posso criar o arquivo random. Se quiser me mostrar um exemplo acho que fica mais fácil... Acabei apelando e usando um tokenizer dentro do outro... Ainda não testei pq não terminei, mas ficou mais ou menos assim:
public class prob107{
	public static void main(String args[])throws IOException{

//As variáveis vão ficando aqui, seguidas pelas descrição de suas funções...
String 	leitura="",
		linha="",
		t="",
		q="",
		
int c=1,	//variável de controle...
	T=0,	//altura do Gato Esperto
	Q=0,	//quantidade de gatos trabalhadores
	V=0,	//gatos que não trabalham ("vagais")
	M=0,	//altura dos menores gatos
	N=0;	//constante dada no problema...

File file = new File("arq");    
FileReader GATOS = new FileReader("gatos.txt"); 
BufferedReader gatos = new BufferedReader(GATOS); 

leitura = gatos.readLine();
//Dividindo o arquivo por linhas...
StringTokenizer tokens = new StringTokenizer(leitura,"\n");    
    while(tokens.hasMoreTokens()){
        do{//separando os tokens de cada linha
            StringTokenizer stk = new StringTokenizer(tokens.toString());
            while(stk.hasMoreTokens()){
                T = Integer.parseInt(stk.nextToken());
                Q = Integer.parseInt(stk.nextToken());
                do{//descobrir qtos gatos vagais existem...
                    //a preguiça mental tá comendo, resolvo isso depois...
                }while(M!=1);
            }
        }while(T!=0 && Q!=0);
    }
Bom, falando de uma vez, esse é o problema 107 do acm. Taí o site pra quem quiser dar uma olhada. Tô resolvendo pra estudar... se quiserem ajudar com uma solução melhorzinha, tô aceitando... http://acm.uva.es/p/v1/107.html
F

no se codigo soh sera lida a primeira linha do arquivo…

mas eh por ai mesmo, com o metodo readLine() da classe BufferedReader vc le apenas uma linha, dai eh soh percorrer linah pro linha e ir processando uma a uma…

try{
 BufferedReader in = new BufferedReader(new FileReader("arquivo.txt"));
 String str;
 while ((str = in.readLine()) != null){
  // aqui vc processa a linha
 }
}
catch (Exception erro){}

e pra processar a linha, como no seu codigo pode ter mais de um espaco, pra evitar problemas vc pode comecar “limpando” o espaco extra, caso ele exista, nada que o metodo trim() da classe String nao resolva…

str = str.trim();

depois eh soh jogar no StringTokenizer e pegar processar as partes…

para gravacao, ficar botando \n funciona… porem uma solucao mais elegante eh usar a classe PrintWriter, dai vc usa o metodo println() que jah coloca um “\n” automatico no final…

PrintWriter out = new PrintWriter(new FileWriter("arquivo.txt"));
out.println("linha 1");
out.println("linha 2");
A

Caraca, nada que um cara bem informado não poderia resolver heheh. valeu Felipe, salvou meu recesso.

Criado 22 de dezembro de 2004
Ultima resposta 23 de dez. de 2004
Respostas 4
Participantes 3