Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31

    Lettura File di Testo

    Ragazzi sto avendo un problema in un esercizio sulla lettura di file di testo. Mi spiego meglio: ho un file di testo formato per esempio:
    codice:
     
    6 4 50.26ciao
    42 3 7.45ciao
    2 33 5.67ciao
    //ogni riga termina con "ciao" e prima di questa parola ci sono sempre 2numeri(infatti trovate scritto 26,45,67 ecc...)
    non riesco a capire come poter leggere questo file e dire al compilatore" guarda che il primo numero è un intero, il secondo pure, poi dopo lo spazio fino alla parola "ciao" hai un Double formato da al massimo 2 cifre prima del punto e SEMPRE 2cifre dopo il punto. Confido nel vostro aiuto perchè è una serata che sto' sbattendo contro e sinceramente non riesco a trovare soluzione(magari sarà sciocca e immediata ma giuro che non riesco a pensarne nessuna!)!Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai dato un'occhiata alle espressioni regolari?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    In che senso le espressioni regolari?io per risolvere questo problema avevo pensato ad utilizzare gli Scanner e in particolare i metodi hasNextInt() , hasNextDouble(),nextInt e nextDouble però non funziona perchè per esempio prendendo la prima stringa
    codice:
     6 4 50.26ciao
    se dentro un ciclo faccio una System.out.println(str.nextInt()) mi stampa solo 4 e basta!!

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da soeca
    In che senso le espressioni regolari?
    http://download.oracle.com/javase/tu...gex/index.html

    Originariamente inviato da soeca
    ljio per risolvere questo problema avevo pensato ad utilizzare gli Scanner e in particolare i metodi hasNextInt() , hasNextDouble(),nextInt e nextDouble però non funziona perchè per esempio prendendo la prima stringa
    codice:
     6 4 50.26ciao
    se dentro un ciclo faccio una System.out.println(str.nextInt()) mi stampa solo 4 e basta!!
    Non siamo indovini, fa vedere quel che hai fatto...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    codice:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Scanner;
    
    
    
    public class proviamo 
    {
    	public  static void LeggiFile(String nome) throws IOException
    	{
    		FileReader input = null;
    		FileWriter output = null;
    		Scanner s;
    		BufferedReader in=null;
    		try
    		{
    			input=new FileReader(nome);
    			s=new Scanner(input);
    			output=new FileWriter("output.txt");
    			String str="";
    			in=new BufferedReader(input);
    			
    				System.out.println(s.nextInt());
    				if(s.hasNextInt())
    				{
    					System.out.println(s.nextInt());
    					output.write(s.nextInt());
    				}
    				else
    					if(s.hasNextDouble())
    						output.write((str+=s.nextDouble()));
    			
    			s.close();
    	}
    		catch(IOException e)
    		{
    			e.getMessage();
    		}
    		finally
    		{
    			input.close();
    			output.close();
    		}
    	}
    	public static void main (String args[])throws IOException
    	{
    		LeggiFile("ciao.txt");
    	}
    
    }
    Grazie per il link che mi hai postato...io stavo guardando QUI però se devo essere sincero gli esempi che vengono fatti non mi hanno fatto capire molto!! Per esempio quando riporta alcune delle espressioni utilizzate scrive:
    codice:
     data in formato dd/mm/aaaa
    (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d
    non ho capito come gestisce il giorno e il mese (l'anno si capisce perchè cerca di catturare un numero che è o 19 oppure 20 e poi gli aggiunge 2numeri dopo)

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    Scusate ma abbandonando definitivamente il codice che ho postato(anche perchè errato!) non potrei scrivere (usando le espressioni regolari)
    codice:
     [99]\s[99]\s[99.99]
    perchè alla fine ogni stringa che c'è all'interno del file è composta da un numero da 1 a 99 poi un altro numero da 1 a 99 e un terzo numero che può partire da 0,01 e il cui massimo valore raggiungibile è 99,99!!potrebbe essere corretto ciò che ho scritto?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    Ragazzi penso proprio di aver risolto.....devo solo adattare i codice ai file ma non mi sembra poi così complicato vi posto il mio codice corretto così vediamo se secondo voi si può velocizzare un pochetto:
    codice:
    public class StringSplit {
      public static void main(String args[]) throws Exception{
          new StringSplit().doit();
      }
    
      public void doit() {
          String s3 = "65 5 43.23kg";
          String [] temp = s3.replaceAll("kg", "").split(" ");
          dump(temp);
          }
    
      public void dump(String []s) {
        System.out.print("------------");
        int i,b,h;
        double p;
            b=Integer.parseInt(s[0]);  
            h=Integer.parseInt(s[1]);  
            p=Double.parseDouble(s[2]);
            System.out.println("b: "+b+" h: "+h+" p: "+p);    
      }
    }
    Se devo essere sincero non ho capito molto come si usano le espressioni regolari però comunque questa soluzione non penso sia malvagia anche perché suppongo che l'unica cosa che potrebbe far perdere tempo al programma la creazione di un oggetto ogni volta che leggo una riga del file di testo!!Comunque se conoscete un modo più rapido fatemi sapere!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.