edutecnica

Esercizio 5                     

In un file viene memorizzato il magazzino di una azienda, secondo la notazione:
biella#7@5
ruota#3@8
stelo#2@9
prima del simbolo '#' vi è il nome del prodotto; fra il simbolo '#' e il simbolo '@' vi è il costo del prodotto; dopo il simbolo '@' vi è il quantitativo in pezzi di quel prodotto.
Il programma deve restituire il controvalore del magazzino .


E' chiaro che in questo problema, a parte le operazioni sul file di testo, il lavoro maggiore sarà quello di estrarre le sottostringhe rappresentative il prezzo 'prz' del prodotto e il suo quantitativo 'qta' a magazzino.
Per ogni stringa deve essere calcolato il subtotale 'sub' dato dal prodotto del costo 'prz' del prodotto per la sua quantità 'qta'. Poi bisogna progressivamente sommare i subtotali.
Prima di procedere esaminiamo la questione di come estrarre dalla stringa gli elementi che ci interessano. In questo programma, utilizzando gli operatori indexOf e substring, prima rileviamo la posizione dei marcatori che ci interessano, poi estraiamo le sottostringhe comprese fra le posizioni dei marcatori, qui memorizzati nelle variabili i ed f.

class parser {
public static void main (String args []) {
String s="biella#7@3";
char ch;
int i,f,prz,qta,somma;
i=s.indexOf('#')+1;
f=s.indexOf('@');
prz=Integer.parseInt(s.substring(i,f).trim());
i=s.indexOf('@')+1;
f=s.length();
qta=Integer.parseInt(s.substring(i,f).trim());
somma=prz+qta; System.out.println(somma);
}//fine main
}// fine classe

Qui viene restituita la somma fra il prezzo prz e la quantità qta.
L'operazione è paradossale dal punto di vista logico ma ci serve solo per capire se il programma fonziona. Basandoci su questo esperimento preliminare, possiamo scrivere il programma che deve elaborare i dati provenienti dal file di testo.

import java.io.*;
class maga{
public static void main (String args []){
BufferedReader f=null;
String s="";
int somma=0;
//leggo il file
try {
   f=new BufferedReader(new FileReader("maga.txt"));
   while(s!=null){
      System.out.println(s);
      s=f.readLine();
      if(s!=null){
         somma+=subtotale(s);
      }//fine if
      }//fine while
f.close();
}catch (IOException e){System.err.println("errore");}
System.out.println(somma);
}//fine main

static int subtotale(String s){
char ch;
int i,f,prz,qta,sub;
i=s.indexOf('#')+1;
f=s.indexOf('@');
prz=Integer.parseInt(s.substring(i,f).trim());
i=s.indexOf('@')+1;
f=s.length();
qta=Integer.parseInt(s.substring(i,f).trim());
sub=prz*qta;
return sub;
}//fine subtotale
}//fine class

Come si nota, il lavoro di estrazione delle sottostringhe di interesse e la loro conversione in numeri, viene eseguita dal metodo subtotale() che viene richiamato dal ciclo while che rileva ogni occorrenza di una stringa all'interno del file.