Ricerca dati nel file txt

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
ciao ragazzi!
ho il seguente problema da risolvere: ricevuto in input il file con i dati (provincia e numero di pezzi in quella provincia, tipo Bologna 20) dovrei determinare il totale di pezzi in quella provincia oppure segnalare la mancanza di pezzi in quella provincia.
input dati: Bologna 20, Bologna 10, Milano 20. (tutto nel file "pezzi.txt")
output dell'operazione: se cerco Bologna, mi da 30; se cerco Roma niente.
ecco, io non so come fare la ricerca dei dati all'interno di un file?
qualcuno potrebbe aiutarmi in questa impresa)
grazie!!!

Codice:
public class Autotrasportatori{
      public static void main(String[] args) {
      	  String 
         	nomeFile,
         	nomeProvincia,
         	nomeProvinciaDaCercare;
         int
         	i,
         	quantita,
         	numeroProvince,
         	posizioneProvincia,
           	opzione;
        double
        Lettore
			fileProvinciaLeggi;
		Scrittore
			fileProvinciaScrivi;
		 if(args.length==0)
		 	nomeFile="c:/autotrasportatori.txt";
		 else
		 	nomeFile=args[0];
	    do{
   		    Scrittore.video.println("---------------------");
         	Scrittore.video.println("1* Inserimento dati");
         	Scrittore.video.println("2* Visualizzazione lettura dati");
         	Scrittore.video.println("3* Ricerca provincia con il relativo totale delle barre");
          	Scrittore.video.println("4* Media dei movimenti");
          	Scrittore.video.println("0* Uscita");
           	Scrittore.video.println("---------------------");
         	opzione=Lettore.tastiera.leggiInt();
        	switch(opzione){
          		case 1:     fileProvinciaScrivi=new Scrittore(nomeFile);
          					do{
          						Scrittore.video.println("Nome provincia, premi u per uscire");
          						nomeProvincia=Lettore.tastiera.leggiString();
          						if (!nomeProvincia.equals("u")){
          							Scrittore.video.println("Quantita");
          							quantita=Lettore.tastiera.leggiInt();
         							fileProvinciaScrivi.print(nomeProvincia);
         							fileProvinciaScrivi.print(" ");
         							fileProvinciaScrivi.println(quantita);
         						}
          					}while(!nomeProvincia.equals("u"));
          					fileProvinciaScrivi.chiudi();
          					break;
      			case 2:
       						fileProvinciaLeggi=new Lettore(nomeFile);
       						numeroProvince=fileProvinciaLeggi.contaRighe();
       						for(i=0;i<numeroProvince;i++){
         						nomeProvincia=fileProvinciaLeggi.leggiString();
         						Scrittore.video.print(nomeProvincia+" ");
         						quantita=fileProvinciaLeggi.leggiInt();
         						Scrittore.video.println(quantita);
       						}
       						fileProvinciaLeggi.chiudi();
          					break;								
       		}   	
       		
        }while(opzione!=0);
 	}
 }
 
Ciao Motocross, esistono diversi modi per leggere dati da un file. Ti espongo qui brevemente un semplice metodo per il tuo caso:
Mettiamo il caso che tu hai un file txt in c:\\pezzi.txt, ok??
E i dati sono distribuiti nel file in questo modo:
Bologna, 20 (Invio)
Milano, 10 (Invio)
Torino, 23 (Invio)
Puoi utilizzare questo metodo:
Codice:
public int getPezzi(String citta) throws IOException {
        BufferedReader read = new BufferedReader(new FileReader("c://pezzi.txt"));
        String line = read.readLine();
        while(line!=null) {
            StringTokenizer strTok = new StringTokenizer(line, ",");
            if(strTok.countTokens()!=2) return -2;
            String str = (String) strTok.nextElement();
            if(str.equalsIgnoreCase(citta)) {
                int n_pezzi = Integer.parseInt((String)strTok.nextToken());
                return n_pezzi;
            }
            line = read.readLine();
        }
        return -1;
    }
Se la citta non esiste ritorna -1, se i dati non corrispondono al formato
che ti ho specificato sopra ritorna -2, cioè come dire sturttura del file
non valido, altrimenti ritorna il numero di pezzi di quella citta :
Codice:
int x = getPezzi("Milano");
System.out.println(c)
int n = getPezzi("Napoli");
System.out.println(n);
L' output sara prima 20 e poi -1 in quanto Napoli non c'è.
Lo so, non è facile come argomento ma cerca di adattarlo al tuo caso.

Ciao
 
opps...
mi sono appena accorto che con il mio codice che ho postato, nella compilazione mi da due errori: expected ';' e not statement..
potreste magari voi provare a compilare e dirmi dove sta sto errore, perchè a me segnala la riga 16 e 17 relative a queste due istruzioni: Lettore
fileProvinciaLeggi;
 
Alessandro, ho provato a fare cosi, ma mi da di nuovo expected e not statement...
Codice:
                          double
                          class Lettore {
			double fileAutotrasportatoriLeggi;}
		class Scrittore {
			double fileAutotrasportatoriScrivi;};
		 if(args.length==0)
		 	nomeFile="c:/autotrasportatori.txt";
		 else
		 	nomeFile=args[0];
 
lespaul, scusa...ma il codice public int getpezzi lo devo incorporare in un nuovo file class oppure mettere all'interno del mio (e dove).
e il secondo pezzettino?=)
 
Il metodo lo puoi inerire all'intreno della tua classe, in punto qualsiasi della classe ovviamente fuori dal corpo di un altro metodo :D. Il secondo pezzettino era giusto un esempio per farti capire come funziona, cmq lo puoi insrire nel main. Mi raccomando creati un file pezzi.txt con il testo che ti ho indicato
 
ho provato e ho ottenuto questo:
nel public int getPezzi...can not find symbol class StringTokenizer
e dopo per l'altro pezzettino int x = getPezzi("Milano"); dice:
non-static method getPezzo(java.lang.String) cannot be referenced from a static context
cosa si risolvono errori del genere?)
(adesso cmq provo a cercare su internet)
 
allora, importando
import java.util.StringTokenizer;
import java.lang.String;
il primo mi ha risolto il problema relativo al metodo.
ma in generale non sono ancora riuscito a risolvere il problema del totale per la citta((
 
inserisci la keyword static direttamente al metodo in quetso modo:
Codice:
public static void getPezzi...
invece di
Codice:
public void getPezzi...
e vedi che si risolve il problema
 
ciao. guarda, io adesso sono a questo punto: per mi da il totale di tutte le province e non di quella che mi interessa..come faccio a modificare?
Codice:
case 3:
quantita=0;
fileAutotrasportatoriLeggi=new Lettore(nomeFile);
 numeroProvince=fileAutotrasportatoriLeggi.contaRighe();
 for(i=0;i<numeroProvince;i++){
 nomeProvincia=fileAutotrasportatoriLeggi.leggiString();
 Scrittore.video.print(nomeProvincia+" ");
 quantita=quantita+fileAutotrasportatoriLeggi.leggiInt();
}
Scrittore.video.println(quantita);
break;
 
Scusami, scritto cosi purtroppo è difficile darti una riposta che possa risolvere per intero il tuo problema, ti dico sinceramente che non ho capito un granchè in questo codice, con quantita cosa devi fare?? Deve indicare il numero di pezzi di una provincia che inserisci da tastiera??
Allora in questo caso, se utilizzi il metodo che ti ho postato, basta fare in questo modo:
Codice:
quantita = getPezzi(nomeProvincia);
if (quantita==-1) {//allora non ci sono pezzi in questa provincia}
else {//stampa quantita}
Piu di questo non so che dirti, perchè ripeto non si tratta di qualcosa in particolare, ma di tutto il problema in se che penso non ti sia chiaro o meglio non riesci a implementarlo bene in java :confused:
 

Discussioni simili