Parsing file di testo

di il
25 risposte

Parsing file di testo

Ciao amici ho una domanda da porvi. Dovrei fare un'applicazione JAVA che sia in grado di leggere un file di testo che gli passerò io, e darmi come risultato tutto il testo compreso tra due parole.
Esempio:

Inizio shjk sdjkla jkdljkls jkljkl Fine djkljksljkldjl ajkljkls jkld jklajkls Inizio sjdkljkl Fine

Tutte le parole comprese tra Inizio e Fine devono essere stampate.

Esiste una classe apposita per risolvere questo problema?

25 Risposte

  • Re: Parsing file di testo

    MacGigi ha scritto:


    Inizio shjk sdjkla jkdljkls jkljkl Fine djkljksljkldjl ajkljkls jkld jklajkls Inizio sjdkljkl Fine

    Tutte le parole comprese tra Inizio e Fine devono essere stampate.
    Il metodo basilare e semplice: usi indexOf e substring. Cerchi l'indice della parola di inizio, se lo trovi puoi determinare l'indice del primo carattere da prendere dopo tale parola. Poi da quel punto cerchi l'indice della parola di fine, se lo trovi hai l'indice "escluso" finale. A quel punto basta un substring. Poi per ottenere le singole parole basta uno split() o StringTokenizer, a tua scelta.
    Insomma, è la soluzione terra-terra e richiede solo un minimo di ragionamento.
  • Re: Parsing file di testo

    In realtà la mia parola iniziale è costituita da tre parole. Vale lo stesso ragionamento fatto da te?
  • Re: Parsing file di testo

    MacGigi ha scritto:


    In realtà la mia parola iniziale è costituita da tre parole. Vale lo stesso ragionamento fatto da te?
    Certo, se le due parti che denotano inizio/fine le intendi genericamente come una qualunque sequenza di caratteri di cui devi trovare una occorrenza.
  • Re: Parsing file di testo

    Ci sono riuscito grazie
    	String testo = "sd Found a flow to sink bla bla bla Maximum";
    		//System.out.println(testo.indexOf("Found a flow"));
    		int inizio = testo.indexOf("Found a flow");
    		
    		//System.out.println(testo.indexOf("Maximum"));
    		int fine = testo.indexOf("Maximum");
    		System.out.println(testo.substring(inizio, fine));

    A questo punto dovrei aumentare la difficoltà. Ovvero fare la stessa cosa però leggendo un file di testo. In linea di massima è la stessa cosa?
  • Re: Parsing file di testo

    MacGigi ha scritto:


    Ci sono riuscito grazie
    Prego. Solo che come hai fatto hai incluso nella sottostringa anche il delimitatore iniziale. Se è quello che volevi ok. Altrimenti ti basta spostare inizio della lunghezza del delimitatore iniziale.

    E se, per ipotesi, delimitatore iniziale e finale fossero uguali, non ti funzionerebbe. Dovresti sfruttare meglio indexOf.

    MacGigi ha scritto:


    A questo punto dovrei aumentare la difficoltà. Ovvero fare la stessa cosa però leggendo un file di testo. In linea di massima è la stessa cosa?
    L'algoritmo citato non cambierebbe. Invece che una stringa letterale usi una stringa letta da file, chiaramente con le classi di I/O.
  • Re: Parsing file di testo

    Si volevo includere anche la stringa iniziale.

    Per quanto riguarda il file, glie lo passo in questo modo:
    BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("prova.rtf") ) );
    Dopodiché non so andare avanti.Devo leggere riga per riga? mmm sono confuso.
  • Re: Parsing file di testo

    MacGigi ha scritto:


    Per quanto riguarda il file, glie lo passo in questo modo:
    BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("prova.rtf") ) );
    Fin qui ok (nota solo che InputStreamReader usato così utilizza il charset predefinito della piattaforma).

    MacGigi ha scritto:


    Devo leggere riga per riga?
    Se vuoi applicare l'algoritmo di ricerca indicato prima per ciascuna singola riga sì. Però se parli di .rtf cioè del "Rich Text Format" è un po' più complesso e quindi dovresti precisare cosa vuoi cercare ed estrarre.
  • Re: Parsing file di testo

    Utilizzo un mac e delle analisi che ho fatto le ho inserite in un file di testo usando TextEdit il quale salva in .rtf
  • Re: Parsing file di testo

    public static void main(String[] args)  throws IOException  {
    		// TODO Auto-generated method stub
    
    	
    		BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("prova.rtf") ) );
    		String line = br.readLine();
    		while(line!=null) {
    			int inizio = line.indexOf("Found a flow");
    			int fine = line.indexOf("Maximum");
    			System.out.println(line.substring(inizio, fine));
    		}
    		

    Ho fatto in questo modo ma mi da il seguente errore
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    	at java.lang.String.substring(String.java:1948)
    	at Parsing.main(Parsing.java:23)
  • Re: Parsing file di testo

    MacGigi ha scritto:


    Utilizzo un mac e delle analisi che ho fatto le ho inserite in un file di testo usando TextEdit il quale salva in .rtf
    Sì ma il RTF è un testo ASCII che però contiene anche marcatori per comandi e formattazioni varie.
    Apri il .rtf con un editor di testo "puro" (tipo Notepad su Windows) e ti accorgerai del "macello" che c'è negli RTF.

    Quindi ... prima valuta bene se è quello che volevi e ti aspettavi.
  • Re: Parsing file di testo

    MacGigi ha scritto:


    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    	at java.lang.String.substring(String.java:1948)
    	at Parsing.main(Parsing.java:23)
    Le stringhe ovviamente le puoi non trovare, quindi un minimo di controllo del valore restituito da indexOf ci vuole ....
  • Re: Parsing file di testo

    Aiuto da casa? ^_^

    Comunque per quanto riguarda il fatto dell'rtf , appena mi stampa il programmino ti saprò dire
  • Re: Parsing file di testo

    ??
  • Re: Parsing file di testo

    Comunque non l'ho saputo risolvere questo problema. Ti prego mi aiuti?
Devi accedere o registrarti per scrivere nel forum
25 risposte