• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

midnight2k

ler dados de um ficheiro para um array

16 mensagens neste tópico

estou com uma pequena duvida no programa que estou a elaborar.. então é assim eu tenho um ficheiro txt com uns dados.. e quero no programa em java passar esses dados para um array.. ou seja os dados no txt estão separados por o caracter ":" o que eu quero e' ler esses dados certos para um array... mas nao consigo ver como fica o codigo :S

alguem me pode elucidar como deverei fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basta leres linha a linha e depois a cada linha fazer um split pelo char ":" e assim ele retorna logo uma array com todas as palavras separadas por ":"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então poderas me dizer o que estara errado neste codigo?  :wallbash:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        String lin;
        String[ ][ ] jogador;
        int l,c;
        Scanner fi=new Scanner(new File("jogadores.txt"));
        while(fi.hasNextLine()){
            for (int i=0; i<l; i++){
                for (int j=0; j<c; j++){
                    lin = fi.nextLine();
                    jogador[l][c] = lin.split(":");
                }
            }
        }
        
        for(int p=0; p<jogador.length; p++) {
            System.out.println("Nº"+p+"nome"+jogador[l]+"golos"+jogador[c]);
        }
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso está mal penso que assim funciona e está correcto.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        String lin;
        String[ ] jogador;
        int l,c;
        Scanner fi=new Scanner(new File("jogadores.txt"));
        while(fi.hasNextLine()){
            for (int i=0; i<l; i++){
                for (int j=0; j<c; j++){
                    lin = fi.nextLine();
                    jogador = lin.split(":");
                }
            }
        }
        
        for(int p=0; p<jogador.length; p++) {
            System.out.println("Nº"+p+"nome"+jogador[l]+"golos"+jogador[c]);
        }
    }
}

PS :  Isso compilava ?? quele jogador [l][c] = .... penso que nem existe em Java.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É impressão minha ou estás a atribuir sempre o valor da última linha à variável "jogador"? Estás a sobrepor sempre o valor da variável...

E pensas que não existem matrizes em Java? Mas que raio?!...

Aqui está uma alternativa, adicionei um ficheiro de teste para confirmar que este é o formato pretendido. O caminho do ficheiro está hardcoded mas é simples de mudar.

public static void main(String[] args) {
BufferedReader reader = null;
        try {
            String line;
            Vector<String[]> v = new Vector<String[]>();
            
            reader = new BufferedReader(new FileReader(new File("c:\\teste.txt")));

            while ((line = reader.readLine()) != null) {
                v.add(line.split(":"));
            }
            
            for(String[] s : v) {
                System.out.println("Antes: " + s[0] + " / Depois: " + s[1]);
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException ex) {
                //ignore
            }
        }
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É impressão minha ou estás a atribuir sempre o valor da última linha à variável "jogador"? Estás a sobrepor sempre o valor da variável...

E pensas que não existem matrizes em Java? Mas que raio?!...

Ups pois é não reparei nesse problema estava a pensar numa só linha.

Claro que existe matrizes em Java mas não da forma que ele estava a fazer acho que não dá dado que ele não inicializa o array. Para alem disso tento evitar array multidimencionais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Knitter desculpa a minha ignorancia mas ainda nao sou nenhum programador avançado em java portanto ainda não posso programar nesses horizontes x)

Pois eu tava a fazer isto tudo mal.. e depois de andar as voltas com isto cheguei ao meu codigo final.. mas nao final como o esperado..  :rant_01: mas ja tive a olhar para isto e não tou a encontrar o problema de isto nao funcionar..

primeiramente não me conseguia carregar os dados do ficheiro..

depois da-me uns quantos erros dentro da estrutura case

ja me ando a passar com isto :x  :wallbash:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        Scanner ler = new Scanner(System.in);
        Scanner fi=new Scanner(new File("jogadores.txt"));
        Formatter fo=new Formatter(new File("jogadores.txt"));
        String lin;
        String[] jogadores;
        int[] golos=new int[22];
        String[] nomes=new String[22];
        int nelem=0;
        int n=0;
        int m=menu();
        while(m > 0 || m < 8){
            switch(m){
                case 1:while(fi.hasNextLine()){
                    lin = fi.nextLine();
                    jogadores = lin.split(":");
                    nelem=ler(jogadores,nomes,golos,nelem);
                }
                m=menu();
                break;
                case 2:System.out.println("Introduza o nome do jogador que deseja pesquisar:");
                introduz=ler.next();
                int pos=pesquisar(jogadores,n,introduz);
                if(pos==-1)
                    System.out.println("O jogador" + introduz + "não se encontra na lista.");
                else System.out.println("O jogador" + introduz + "está localizado na posição "+pos);
                m=menu();
                break;
                case 3:System.out.println("Introduza o nome do jogador que prentende adicionar o golo:");
                introduz=ler.next();
                boolean v=marcar(jogadores,nomes,golos,n,introduz,novo);
                if (v==true)
                    System.out.println("Golo adicionado com sucesso.");
                m=menu();
                break;
                case 4:guardar(jogadores,nomes,golos,nelem);
                m=menu();
                break;
            }
        }
        fi.close();
        fo.close();
    }
    
    public static int menu(){
        int opcao;
        Scanner ler = new Scanner(System.in);
        System.out.println("1 - Ler Jogadores");
        System.out.println("2 - Pesquisar Jogadores");
        System.out.println("3 - Adicionar Golos");
        System.out.println("4 - Gravar");
        System.out.println("0 - Sair");
        opcao=ler.nextInt();
        return opcao;
    }
    public static int ler(String[] jogadores, String []nomes, int[] golos, int n){
        nomes[n]=jogadores[1];
        golos[n]=Integer.parseInt(jogadores[0]);
        System.out.println("Dados carregados com sucesso.");
        return n+1;
    }
    
    public static int pesquisar(String []jogadores,int n,String introduz){
        int i=0,res=-1;
        for (i=0; i<n; i++){
            if(jogadores[i].equals(introduz)){
                return i;
            }
        }
        return -1;
    }
    
    public static boolean marcar(String []jogadores, String[]nomes, int []golos, int n,String introduz,String novo){
        boolean res=false;
        int pos;
        pos=pesquisar(jogadores,n,introduz);
        if(pos!=-1){
            golos[pos]=golos[pos]+1;
            res=true;}
        return res;
    }
    
    public static void guardar(String []jogadores, String []nomes, int[]golos, int nelem){
        for(int i=0; i<nelem;i++) {
            //fo.format("%s%s%d%n",nomes[i],":",golos[i]);
        }
        System.out.println("Dados guardados com sucesso.");
    }
}


0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que erros na estrutura case? E já agora, podes colocar um ficheiro de texto exemplo para o que pretendes?

Quanto à minha programação, não fiz nada de especial, o mais estranho que podes ver talvez seja o uso de genéricos, de resto é um simples while para ler linha a linha e um foreach para mostrar o texto lido.

Ups pois é não reparei nesse problema estava a pensar numa só linha.

Claro que existe matrizes em Java mas não da forma que ele estava a fazer acho que não dá dado que ele não inicializa o array. Para alem disso tento evitar array multidimencionais.

Isso de não ter iniciado a matriz é outro problema :), mas a ideia estava +/- correcta. E não tens razão nenhuma para evitar matrizes, é apenas mais um objecto, são referências como qualquer outro objecto :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas tens ai termos que ainda não estou muito familiarizado para ja  :-[ quanto ao ficheiro que estou a usar está em anexo aqui.

O objectivo do programa seria ler do ficheiro de texto “jogadores.txt”, o nome dos jogadores e os golos para um array isto num metodo como esta citado para posteriormente tratar dos dados nos metodos seguintes, depois o metodo pesquisar(...) que recebe o nome de um jogador e devolve a posição em que este se encontra no array; o marcar que adiciona um golo ao array do respectivo jogador e por fim o gravar para o output ficheiros.txt

os erros na estrutura case são referentes ao introduz não sei porque esta a acusar erro  :nono1:

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tb tenho de fazer este exercicio e tou-me a passar...

no exercicio diz para criar um metodo ler() para ler o conteudo do ficheiro para um array.

Até aqui ta tudo a funcionar, mas depois diz também para criar um metodo pesquisar.

No metodo pesquisar eu queria usar os 2 arrays que preenchi no metodo ler(). porque senao o metodo ler nao fazia sentido...

Nao deve dar com o return, porque eu queria aceder aos 2 arrays.

era mais facial com uma matriz, mas no exercicio diz para usar arrays

:|

Como é que eu faço para o metodo pesquisar ter acesso aos 2 arrays preenchidos pelo metodo ler?

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma matriz é um array de arrays :)

Mas só como curiosidade, estão a aprender POO? é que o código apresentado está errado no que toca a Java, isto porque estão a usar Java como se de uma linguagem procedimental se tratasse, Java é POO. Além de que os métodos não devem ser estáticos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

da maneira como ele esta  fazer o codigo as funcoes tem de ser declaradas static, pq dentro de uma funcao static so podes usar funcoes static se estiverem na mesma classe (i guess).

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

da maneira como ele esta  fazer o codigo as funcoes tem de ser declaradas static, pq dentro de uma funcao static so podes usar funcoes static se estiverem na mesma classe (i guess).

boas programacoes

Dentro de um método estático podes invocar métodos estáticos de qualquer classe e métodos de instância quando a instância está declarada dentro do método estático.

Mas os métodos apresentados não deviam ser estáticos, como disse, parece que está a programar em C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Uma matriz é um array de arrays

Mas só como curiosidade, estão a aprender POO? é que o código apresentado está errado no que toca a Java, isto porque estão a usar Java como se de uma linguagem procedimental se tratasse, Java é POO. Além de que os métodos não devem ser estáticos.

Nós nas aulas apenas aprendemos programação procedimental, e apenas trabalhamos com metodos static.

Apenas houve uma aula para nós (alunos), termos a noção de que os metodos nao têm de ser static, etc.

Mas isto ainda é o começo, não se pode começar a complicar muito..

E nestes exercicios fazemos as coisas de acordo com o que aprendemos nas aulas.

P.S. já resolvi a minha dúvida, era muito simples.

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isto ainda é o começo, não se pode começar a complicar muito..

Começo ou não, não vos deviam ensinar coisas erradas. Teria sido mais simples terem-vos dito que era necessário instanciar sempre a classe Main e chamar o métodos dessa classe, assim não vos ensinavam erros. Mas ainda bem que resolveste o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nós nas aulas apenas aprendemos programação procedimental, e apenas trabalhamos com metodos static.

Apenas houve uma aula para nós (alunos), termos a noção de que os metodos nao têm de ser static, etc.

Mas isto ainda é o começo, não se pode começar a complicar muito..

E nestes exercicios fazemos as coisas de acordo com o que aprendemos nas aulas.

P.S. já resolvi a minha dúvida, era muito simples.

Cumpz

podias postar o codigo dos metodos que usaste para ter uma ideia de como implementaste isso?

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora