View Single Post
Old 07-07-2009, 10:35   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Riposto il codice, identato in modo da redere il tutto più leggibile:
Codice:
import java.io.*;
import java.lang.*;
import java.util.*;

class Log
{
    public static void main (String args[])
    {
        int a=1;
        char thischar=' ';  //char per la lettura di un singolo carattere
        String s=null;      //string per la lettura di una linea

        try
        {
            FileReader f = new FileReader("protezione2.txt");
            BufferedReader fIN = new BufferedReader(f);
            FileWriter f2 = new FileWriter("EventLog.txt",true);
            PrintWriter fOUT = new PrintWriter(f2);

            s=fIN.readLine();
            System.out.println(s);

            do
            {
                while(thischar!='?')
                {
                    thischar=(char) fIN.read();
                    System.out.print(thischar);
                    if(thischar=='A') {                         //SE il carattere è 'A'
                        thischar=(char) fIN.read();                 //leggi il carattere successivo
                        if(thischar=='d') {                     //SE il carattere successivo è 'd'
                            thischar=(char) fIN.read();             //leggi il carattere successivo
                            fOUT.println(s);
                        }
                    }
                }
                s=fIN.readLine();
            }
            while(s!=null);
        }
        catch(IOException e)
        {
            System.out.println("Si e' verificata un'eccezione "+e.getMessage());
        }
    }
}
Primo "problema" che salta all'occhio:
- sia che le operazioni di I/O vadano a buon fine oppure no, gli stream non vengono chiusi.

Invece per quanto riguarda il codice che rappresenta la logica di estrazione delle stringhe desiderate:
- notiamo che ogni stringa è formata sempre da 8 campi (Tipo,Data,Ora,Origine,Categoria,Evento,Utente,Computer) separati dal carette di virgola, e quello che ci interessa è il campo Utente (il settimo): quando è uguale alla stringa "Amministratore" l'intera riga letta va inserita nel nuovo file.
- potresti realizzare semplicemente la cosa usando un oggetto java.util.Scanner che supporta il parsing di String mediante uno o più delimitatori personalizzabili: nel tuo caso, dato un oggetto String che rappresenta una riga del file di input, il delimitatore per il parsing è il carattere ','.

Come procederei io:
- tramite BufferedReader leggo tutte le righe del file di input e le salvo in un array di String; chiudo il file di input.
- creo una java.util.List<String> che conterrà le String da scrivere nel nuovo file di output.
- ciclo l'array di String, per ogni String nell'array: tramite uno Scanner (con delimitatore personalizzato sul carattere di virgola) faccio il parsing della String per prendere il settimo 'token' e confrontarlo con la String "Administrator": se è uguale allora lo aggiungo alla java.util.List<String>.
- ciclo la lista di String e tramite un PrintWriter le scrivo tutte sul file di output; chiudo il file di output.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 07-07-2009 alle 10:49.
banryu79 è offline   Rispondi citando il messaggio o parte di esso