Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205

    [JAVA]Lettura File .dat

    Buongiorno,
    devo leggere dei dati da un file .dat strutturato in questo modo:
    codice:
         Team         F    A
    1.  Baci          45   6
    2.  ProPatria     30  15
    3.  Avellino          19
    4.  Salerno       35  21
    Dovrei prendere i dati delle colonne F e A ed esaminarli il mio problema è come fare a prendere i singoli dati, devo splittare sugli spazi? Ma ad esempio nella riga 3 se mi manca un valore come lo risolvo?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Uccio87 Visualizza il messaggio
    devo splittare sugli spazi? Ma ad esempio nella riga 3 se mi manca un valore come lo risolvo?
    Semplicemente "splittare" no, perché non ci sono delimitatori più particolari (es. vigole, ecc..) e da quanto dici possono mancare dei dati (es. F).
    Se il file è come si vede qui, allora è fatto a "colonne", quindi andrai a prendere i caratteri alle tal colonne. Ovvero farai dei substring.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ovvero farai dei substring.
    Grazie per la risposta.
    quindi mi conviene prendere ogni singola riga del file esamire ogni carattere quando trovo un valore uso substring per prendere il dato e magari inserire tutto in una matrice? così poi da poter lavorare sulle singole colonne

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Uccio87 Visualizza il messaggio
    quindi mi conviene prendere ogni singola riga del file
    Sì, saltando la prima (intestazione), poi "per ciascuna riga". Se ci fossero righe vuote, le puoi anche saltare.

    Quote Originariamente inviata da Uccio87 Visualizza il messaggio
    esamire ogni carattere quando trovo un valore uso substring per prendere il dato
    Non c'è da esaminare carattere per carattere. Basta un substring, ma devi sapere tu a priori da quale indice a indice è presente una colonna.

    codice:
    1.  Baci          45   6
              11111111112222222222
    012345678901234567890123456789

    La colonna F finisce all'offset 19. Ma inizia al 18 o al 17? Quanto possono essere grandi i valori? Lo devi sapere tu.

    Quote Originariamente inviata da Uccio87 Visualizza il messaggio
    e magari inserire tutto in una matrice? così poi da poter lavorare sulle singole colonne
    Più che "matrice", meglio una classe che modella l'entità e poi una lista o array di questi oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    Quote Originariamente inviata da andbin Visualizza il messaggio
    ma devi sapere tu a priori da quale indice a indice è presente una colonna.
    L'unica cosa che non mi è chiara è come faccio a saperlo a priori?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Uccio87 Visualizza il messaggio
    L'unica cosa che non mi è chiara è come faccio a saperlo a priori?
    Beh, dipende da dove arriva quel file. L'hai "inventato" tu? Allora puoi fare come ti pare. Te l'ha fornito qualcun'altro? Allora verifica se ci sono specifiche a riguardo. L'hai trovato su internet? Verifica se ci sono specifiche da qualche parte.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Beh, dipende da dove arriva quel file. L'hai "inventato" tu? Allora puoi fare come ti pare. Te l'ha fornito qualcun'altro? Allora verifica se ci sono specifiche a riguardo. L'hai trovato su internet? Verifica se ci sono specifiche da qualche parte.
    No è un test che devo svolgere, specifico come ho approcciato per risolverlo

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    ho approcciato prendendo l'indice della colonna che devo esaminare e supponendo che i dati della colonna iniziano da quel indice e li prendo con un substring
    main
    codice:
    int Findex = checkLine(line, "F");
                int Aindex = checkLine(line, "A");     
                int differenza = -1;
                while ((line2 = br.readLine()) != null)
                {   
                    int GolFatti = tryParse(line2.substring(Findex, Findex+2));
                    int GolSubiti = tryParse(line2.substring(Aindex, Aindex+2));
                    if(numberLine > 0 && GolFatti != -1 || GolSubiti != -1){                   
                        if(GolFatti > GolSubiti) {
                            differenza = differenzaReti(GolFatti, GolSubiti, differenza);
                        }
                    }
                    numberLine++;                
                }
    metodi
    codice:
        public static int checkLine(String linea, String search){
            for(int i=0; i<linea.length(); i++){
                if(linea.charAt(i) == search.charAt(0)){
                    return i;
                }
            }
            return 0;
        }
        
        public static int differenzaReti(int golFatti, int golSubiti, int differenza) {
            int result = golFatti - golSubiti;
            if(golFatti > golSubiti) {
                if(differenza==-1) return result;
                if(differenza > result) {
                    return differenza;
                } else {
                    return result;
                }
            } else {
                return differenza;
            }
        }

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9
    Chiedo scusa se utilizzo questo post ma ho lo stesso identico problema da svolgere, devo mettere le colonne Team, F e A in 3 variabili in una classe java, ovviamente poi tale classe la richiamo in un ArrayList della stessa classe per farci stare tutte le squadre con i relativi gol fatti e subiti, ma non so come fare.

    In il pratica il mio file .dat è questo:

    codice:
           Team            P     W    L   D    F      A     Pts
        1. Cagliari        42    25   8   9    78  -  41    83
        2. Crotone       42    23   13  6    61  -  36    82
        3. Trapani        42    20   13  9    64  -  49    73
        4. Pescara       42    21    9   12   69  -  52    72
       -------------------------------------------------------
       20. Livorno       42    10   12  20    45  -  57    42
       21. Modena      42     11   9   22    37  -  55    42
       22. Como         42     5    18  19    39  -  64    33
    ringrazio chiunque riesca darmi una mano.

    Ps.
    Le colonne sono allineate, nel copia e incolla se disallineato.
    Ultima modifica di egabrom; 06-02-2018 a 13:06

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da egabrom Visualizza il messaggio
    devo mettere le colonne Team, F e A in 3 variabili in una classe java

    Le colonne sono allineate
    Se sono davvero ben allineate e sempre a quelle posizioni, l'ho detto in precedenza nella discussione: basta usare principalmente un substring per estrarre la colonna.
    Chiaramente devi sapere tu a che indice inizia e quanto è lunga la colonna. Nella colonna F vedo solo numeri a 2 cifre. Può essere di 3 cifre? O 4? Devi saperlo tu. Una volta che lo sai, ti basta determinare gli indici di inizio e fine.

    Estratta la colonna, è bene fare un trim() (per eliminare spazi superflui). E se è un numero fai in parsing con Integer.parseInt(str)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.