Parsing file di testo

di Anonimizzato10182 il
25 risposte

25 Risposte - Pagina 2

  • Ho fatto in questo modo ma va in esecuzione , non stampa nulla e resta in esecuzione.
    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");
    			while(inizio != -1 && fine != -1){
    			System.out.println(line.substring(inizio, fine));}
    		}
    		
    		
    		
    	}
    
    }
    
  • Ciao, il "macello" di cui parla andbin è questo: (nota che il solo testo contenuto è "Hello, RTF!")
    
    \rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340
    {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
    {\colortbl;\red255\green255\blue255;}
    \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
    \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
    
    \f0\fs24 \cf0 Hello, RTF!}
    
  • Wow ma se cambio l'estensione del file da .rtf a txt ? Continuo ad avere lo stesso problema?
  • Sì, dovresti ricreare l'intero file direttamente in .txt oppure eliminare manualmente queste linee di formattazione e rinominare il file in .txt
  • Capito. Della ma mi dici gentilmente come risolvere l'eccezione?
  • Beh il tuo programma rimane in esecuzione perché non esce mai dal while più esterno: non cambi mai valore alla variabile "linea", per cui se essa è == nulla allora il programma termina subito, altrimenti va avanti all'infinito. Idem per il loop interno: se inizio e fine sono entrambi diversi da -1 allora stamperanno all'infinito la stringa, altrimenti non la stamperanno mai.
  • Ho fatto in questo modo
    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");
    			if(inizio >0 && fine >0){
    			System.out.println(line.substring(inizio, fine));
    			}
    			else
    				return;
    		}
    		
    	}
    
    }
    Adesso il programma termina, ma non stampa nulla
  • Probabilmente il file di testo non contiene almeno uno dei due "marcatori" (per cui inizio e/o fine sono uguali a -1) oppure il marcatore iniziale è esattamente all'inizio del file (per cui inizio è uguale a 0) e di conseguenza il programma passa dal ramo "else", uscendo subito senza stampare nulla. Nota che se comunque l'if fosse vero allora avresti un (doppio) loop infinito esattamente come prima
  • Capito..grazie
  • MacGigi ha scritto:


    		String line = br.readLine();
    		while(line!=null) {
    
    Per tua conoscenza, l'idioma tipico di uso di readLine è questo:
    String line;
    
    while ((line = br.readLine()) != null) {
        // usa line
    }
    Questo assicura che legge tutte le righe fino alla corretta fine del file che fa terminare il ciclo.

    Se però la parte da estrarre "spanna" su più righe, questo approccio diventa poco pratico e utile. Allora sarebbe meglio leggere l'intero documento per averlo in un unico grosso String. Per fare questo basta leggere a blocchi di N char e appenderli in un StringBuilder/StringBuffer.
  • Perfetto siete stati gentilissimi grazie
Devi accedere o registrarti per scrivere nel forum
25 risposte