LIA - DEIS - Facoltà di Ingegneria - Università di Bologna
Fondamenti di Informatica A - II° Modulo
Corso di laurea in Ing. Informatica (A-E) ed Elettrica - A. A. 2000-2001

Esercizio di Progetto di un Filtro


Scrivere un filtro che prenda l'ingresso da System.in e ponga la propria uscita sia su System.out che sul file il cui nome è passato come primo argomento di invocazione (si controlli il numero degli argomenti).
Il filtro deve eliminare tutti i caratteri in ingresso il cui carattere precedente è un carattere maiuscolo
(cioè un carattere nel range ‘A’-‘Z’).

Ad esempio, il filtro, invocato con argomento fileout.txt, deve trasformare i caratteri forniti da console:

"Esame di Fondamenti di Informatica A II" in

"Eame di Fndamenti di Iformatica AI"

Il risultato dell'elaborazione deve essere scritto sia su System.out che su fileout.txt.


package filtro;
import java.io.*;

public class Filtro1 {

public static void main(String[] args) {

int totale=0; FileWriter file = null;

if (args.length != 1) {
System.out.println("Problemi di argomenti\n sono" + args.length);
System.exit(1); }

try { file = new FileWriter (args[0]); }
catch (IOException e)
{System.out.println("Errore. Problema nella apertura file.");
System.exit(2); }

filtra (file);
System.exit(0);

}

public static void filtra(FileWriter file, String a1) {

InputStreamReader in = new InputStreamReader(System.in);
OutputStreamWriter out = new OutputStreamWriter(System.out);

int x;
boolean statoMaiuscolo = false;

try {

while ((x = in.read()) >= 0) {
// si deve leggere fino alla fine del file

char ch = (char) x;
if (ch == '\n') {out.flush();} // solo per la visualizzazione

if (! statoMaiuscolo) { out.write(ch); file.write (ch);}

if ((ch >= 'A') && (ch <= 'Z')) statoMaiuscolo = true;
else statoMaiuscolo = false;

}

}
catch (IOException e) {

System.out.println("Errore. Problema nella scrittura ");
System.exit(3);

}

try { out.close(); file.close ();}

catch (IOException e) {

System.out.println("Errore. Problema in chiusura");
System.exit(4);

}

}

}