Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26

Discussione: [JAVA] Lettura txt

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104

    [JAVA] Lettura txt

    Salve a tutti.
    Rieccomi per chiedere ancora una volta aiuto. Su un file txt ho scritto una matrice che, all'avvio successivo del programma, devo rileggere.

    mat.jpg

    Devo ovviamente saltare la prima riga, e arrivare direttamente ai valori. C'è un metodo per stabilire il numero di riga da cui iniziare a leggere il file?
    Io ho scritto questo metodo, molto grossolanamente.

    codice:
     public Matrice readMatrice() throws FileNotFoundException {        Scanner s = new Scanner(doc);
            s.nextLine(); //escludo la prima riga del file txt e passo alla seconda
            Matrice mat;
            int cont = 0;
            /** Conto il numero di righe per creare la matrice che conterrà i valori del file txt */
            while (s.hasNextLine()) {
                cont++;
            } 
            
            
            int i, j;
            mat = new Matrice(cont,cont);
            FileReader fr = new FileReader(doc);
            s.close();
            
            Scanner t = new Scanner(doc);
            t.nextLine(); // elimino di nuovo la prima riga per leggere dalla seconda in poi
            while (t.hasNextLine()){
                StringTokenizer st = new StringTokenizer(t.nextLine(), "  ");
                
                int ID = Integer.parseInt(st.nextToken());
                
                StringTokenizer st2 = new StringTokenizer(t.nextLine(), "\t");
                
                for (i = 0; i < cont; i++)
                    for (j = 0; j < cont; j++) {
                        mat.inserisci(i, j, (float) st2.nextElement());                    
                    }            
            }
            return mat;
        }
    Ma da quando ho scritto questo, il programma non viene eseguito da netbeans.. Va in running ma non visualizzo nulla xD

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    C'è un metodo per stabilire il numero di riga da cui iniziare a leggere il file?
    O è esplicitato nel file stesso (chiaramente un formato leggermente differente) oppure lo sai tu implicitamente.
    E il tuo è quest'ultimo caso. Sai che la riga è da saltare. Quindi appunto con Scanner hai fatto un nextLine() ignorando la stringa.

    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Io ho scritto questo metodo, molto grossolanamente.

    Ma da quando ho scritto questo, il programma non viene eseguito da netbeans.. Va in running ma non visualizzo nulla xD
    Innanzitutto il problema più evidente è che hasNextLine() ti dice solo se c'è un'altra linea o no. Ma non fa avanzare alcunché, non legge un bel nulla. Quindi nel while devi comunque usare nextLine(). "Finché c'è una riga, leggi la riga".

    Inoltre non capisco perché hai creato un FileReader che non usi.

    E infine il doppio for dentro l'ultimo while è dubbio. Tu stai gestendo una riga per volta ... non ha senso iterare sulle righe della matrice lì dentro.

    Rivedi/rivaluta il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Il fatto che non mi dia errore e non si avvii proprio il programma non mi era mai capitato -.-

  4. #4
    E comunque, oltre quello detto da andbin, non visualizzi nulla perché non hai alcun System.out o JOptionPane per visualizzare i risultati...
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da andbin Visualizza il messaggio
    O è esplicitato nel file stesso (chiaramente un formato leggermente differente) oppure lo sai tu implicitamente.
    E il tuo è quest'ultimo caso. Sai che la riga è da saltare. Quindi appunto con Scanner hai fatto un nextLine() ignorando la stringa.


    Innanzitutto il problema più evidente è che hasNextLine() ti dice solo se c'è un'altra linea o no. Ma non fa avanzare alcunché, non legge un bel nulla. Quindi nel while devi comunque usare nextLine(). "Finché c'è una riga, leggi la riga".

    Inoltre non capisco perché hai creato un FileReader che non usi.

    E infine il doppio for dentro l'ultimo while è dubbio. Tu stai gestendo una riga per volta ... non ha senso iterare sulle righe della matrice lì dentro.

    Rivedi/rivaluta il tutto.
    Ho già usato questo metodo while(s.hasNextLine) per la lettura di un altro file e funziona...
    Te lo posto

    codice:
    public ElencoRegali readregali() throws FileNotFoundException{        Scanner s = new Scanner(doc);
            ElencoRegali er = new ElencoRegali();
            
            /** Ciclo per la divisione della stringa studente nei campi dell'ArrayList*/
            while (s.hasNextLine()) {
                StringTokenizer st = new StringTokenizer(s.nextLine(), " ");
                
                String tipo = st.nextToken();
                String prezzo = st.nextToken();
                String info = st.nextToken();
                
                Regalo temp = new Regalo (tipo, Float.parseFloat(prezzo), info);
                er.addRegalo(tipo, Float.parseFloat(prezzo), info);
            } 
            s.close();
            return er;
        }
    Per quanto riguarda il doppio for.. Ho bisogno di utilizzare il metodo mat.inserisci che richiede come parametri gli indici e il valore quindi i due indici sono dati dai due for.. no?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    E comunque, oltre quello detto da andbin, non visualizzi nulla perché non hai alcun System.out o JOptionPane per visualizzare i risultati...
    non centra niente quello.. nel main visualizzo la matrice.. ma se non si avvia il programma ovvio che non posso vedere i risultati xD

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Ho già usato questo metodo while(s.hasNextLine) per la lettura di un altro file e funziona...
    Il punto è che hai fatto

    while (s.hasNextLine()) {

    dove dentro non leggi nulla. Lo ripeto: hasNextLine non fa avanzare un bel nulla. Se al primo test dice true, continuerà all'infinito a dire true e a ciclare. Stop.

    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Per quanto riguarda il doppio for.. Ho bisogno di utilizzare il metodo mat.inserisci che richiede come parametri gli indici e il valore quindi i due indici sono dati dai due for.. no?
    Sì ma l'indice di riga lo devi far proseguire in avanti man mano che leggi le righe. Non "ciclo su tutte le righe" per ogni riga!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il punto è che hai fatto

    while (s.hasNextLine()) {

    dove dentro non leggi nulla. Lo ripeto: hasNextLine non fa avanzare un bel nulla. Se al primo test dice true, continuerà all'infinito a dire true e a ciclare. Stop.


    Sì ma l'indice di riga lo devi far proseguire in avanti man mano che leggi le righe. Non "ciclo su tutte le righe" per ogni riga!

    Ho capito quello che vuoi dire.. Io controllo che ci sia ancora una riga while (s.hasNextLine()) {
    poi è l'oggetto StringTokenizer che si occupa di andare avanti con (s.nextLine). Se nell'altro metodo funziona credo sia così xD

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Ho capito quello che vuoi dire.. Io controllo che ci sia ancora una riga while (s.hasNextLine()) {
    poi è l'oggetto StringTokenizer che si occupa di andare avanti con (s.nextLine). Se nell'altro metodo funziona credo sia così xD

    Quasi... non è lo StringTokenizer è proprio quel "s.nextLine()" (che viene passato al costruttore di StringTokenizer) che fa avanzare la lettura. Potresti anche non avere nessuno StringTokenizer, l'importante è che tu faccia eseguire il s.nextLine().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Quasi... non è lo StringTokenizer è proprio quel "s.nextLine()" (che viene passato al costruttore di StringTokenizer) che fa avanzare la lettura. Potresti anche non avere nessuno StringTokenizer, l'importante è che tu faccia eseguire il s.nextLine().


    Ciao.
    bene quindi su questo ci siamo..
    il problema è che da quando nel main ho inserito

    mat = dm.readMatrice();

    il programma non si avvia più.. diciamo che si ferma in run.. mentre se levo quell'istruzione, parte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.