Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Input da file

  1. #1

    Input da file

    Salve,
    sto tentando di capire bene l'I\O da\su file in Java, e ho un problema :
    considerando un file del genere
    codice:
    A 1 0
    A 2 0
    B 1 0
    B 2 0
    C 1 0
    C 2 0
    in che modo posso prendere in input ogni singolo elemento di ogni riga e salvarlo in una variabile per poi riutilizzarlo in un programma?

    es. (per cercare di farmi capire meglio)
    voglio salvare gli elementi delle righe in questo modo:

    codice:
    char c1=A;
    int i1=1;
    boolean d=0;
    ecc.
    in questo metodo trovato su questo forum riesco a prendere l'input riga per riga
    codice:
    public void inputDaFile(){
            try{
                FileReader dati=new FileReader("file.txt");
                BufferedReader b=new BufferedReader(dati);
                
                while(true) {
                           
                                 /*cosi riesco a prendere la riga completa*/
                      String s=b.readLine();
                      if(s==null)
                        break;
                      System.out.println(s);
                    }
                b.close();            
               }
            catch(IOException e){System.out.println("Errore file non presente: " + e);System.exit(1);}
        }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Ti ho scritto un esempio da cui puoi prendere spunto
    codice:
    public List<Data> linee = new ArrayList<>();
    
    
        public void inputDaFile(){
            try{
                Scanner scan = new Scanner(new File("file.txt"));
    
                while(scan.hasNext())
                    linee.add(new Data(scan.next().charAt(0), scan.nextInt(), scan.nextInt() != 0));
            }
            catch(IOException e){
                System.out.println("Errore file non presente: " + e);
                System.exit(1);
            }
        }
    
    
        class Data{
            public final char c1;
            public final int i1;
            public final boolean d;
    
            public Data(char c1, int i1, boolean d){
                this.c1 = c1;
                this.i1 = i1;
                this.d = d;
            }
        }

  3. #3
    Devi prima trasformare la stringa in un array di caratteri:
    codice:
    char s_ar[] = s.toCharArray();
    A questo punto per ogni indice dell'array vi si troverà un carattere della stringa che hai preso, a questo punto sta a te decidere come trasformare questo carattere: puoi trasformare una lettera in stringa oppure un numero, prima in stringa, e poi in intero.
    Nel primo caso, cioè da lettera a stringa, usa:
    codice:
    Character.toString(s_ar[indice]);
    Mentre nel secondo caso applichi quello sopra e poi da stringa a intero (Se il carattere, poi trasformato in stringa, non è un numero otterrai un'eccezione)
    codice:
    Integer.valueOf(Character.toString(s_ar[indice]));
    Ultima modifica di CaMpIoN; 28-11-2014 a 22:34
    Forza Napoli!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da stefanaimon Visualizza il messaggio
    in questo metodo trovato su questo forum riesco a prendere l'input riga per riga
    E ciascuna riga devi "spezzarla" per ottenere i tre token. Ci sono svariati modi:
    - java.util.StringTokenizer usando spazio come delimitatore.
    - split di String usando spazio (o più whitespace) come separatore.
    - l'uso di Pattern/Matcher con una espressione regolare per estrarre i tre token (e magari validare in modo più stretto l'intera riga).
    - l'uso (un po' "barbaro", a dire il vero) di un mix di indexOf/substring di String. Sconsigliato se non per motivi "didattici".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    azie a tutti per la risposta.

    Ho "risolto" in questo modo:
    codice:
    public void inputDaFile(char a,int n){
    		try{
    			FileReader dati=new FileReader("Sala"+numSala+".txt");
    			BufferedReader b=new BufferedReader(dati);
    			String s;
    			
    			while(true) {
    			      s=b.readLine();
    			      if(s==null)
    			        break;
    			      
    			      /*Mi trasformo l'input in un array di char*/
    			      char s_ch[]=s.toCharArray();
    			      
    			      /*assegno i char alle singole variabili*/
    			      char ch=s_ch[0];
    			      int i1=s_ch[2];
    			      int bVar=s_ch[4];
    
                         /*PROBLEMA*/
    			      char num=(char)(n+29);
    			      System.out.println(num+" "+(char)i1);
    			      if(a==ch && (char)(n+29)==i1)
    			    	  System.out.println(ch+" " +(char)i1+" "+(char)(bool+1));
    			      
                                  else
    			    	  System.out.println(ch+" "+(char)i1+" ");
    			    }
    			b.close();			
    		   }
    		catch(IOException e){System.out.println("Errore file non presente: " + e);System.exit(1);}
    	}
    ora ho un problema: mi passo come parametri un int e un char che devo andare a confrontare con i dati presi in input e passare la variabile bVar da 0 a 1 (poi successivamente stamparla in un nuovo file ma quello non è un problema )..
    quando vado a fare if(a==ch && (char)(n+29)==i1) non mi confronta le variabili n e i1. Qualcuno mi puo dare una soluzione\spiegazione?

  6. #6
    Scusate nella copia del codice non ho modificato queste due righe:

    codice:
    System.out.println(ch+" "+(char)i1+" "+(char)(bVar+1));
    codice:
    FileReader dati=new FileReader("file.txt");

    Ultima modifica di stefanaimon; 29-11-2014 a 11:36

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 © 2025 vBulletin Solutions, Inc. All rights reserved.