|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
java, leggre da un file ed eseguire operazioni
un amico mi ha chiesto se posso fargli un esercizio in java che gli serve per la scuola, ma purtroppo sono a digiuno di programmazione in java, potete per favore aiutarmi voi!!!
l'esercizio consiste nel dover leggere da un file esempio.txt contenuto in c:\Documenti le prime due righe e sommare alla prima dieci e alla seconda moltiplicare 5 visualizzando poi i risultati a video esempio.txt 0.002 1.6 19 2.25 25 grazie!!! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Ciao!
Beh, è abbastanza banale come esercizio... Devi avere comunque un po' di dimestichezza con gli stream, e con l' I/O su file. Ecco comunque la soluzione: Codice:
import java.io.*; public class Esercizio { public static void main(String[] args) throws IOException{ File f = new File("C:\\Documenti\\esempio.txt"); FileInputStream fs = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fs); BufferedReader filein = new BufferedReader(isr); float a = Float.parseFloat(filein.readLine()); // leggo il primo numero prima riga float b = Float.parseFloat(filein.readLine()); // leggo il secondo numero seconda riga float risultato1 = a + 10; float risultato2 = b * 5; System.out.println("Risultato 1: " + risultato1 + "\n" + "Risultato 2: " + risultato2); System.exit(0); } } Ciao. PS: ma il tuo amico come ha potuto darti da fare un esercizio del genere se sei a digiuno di programmazione? ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Quote:
![]()
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
grazie mille fbcyborg!!!
![]() il motivo per cui si è rivolto a me e perchè ho studiato il linguaggio C (infatti nel messaggio avevo precisato che sono a digiuno di "programmazione in java" ![]() ![]() grazie ancora, ciao ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Quote:
E per la lettura da file, utilizza gli stream! Sono ottimi anche per l'integrazione con un programma che lavora in una rete di calcolatori. |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
nel caso il file esempio.txt contenga righe vuote come bisogna modificare il codice per non avere errori?
esempio.txt 0.002 1.6 19 2.25 25 grazie!!! ![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Ad esempio:
Codice:
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws Throwable { Scanner in = new Scanner(new File(args[0])); in.useLocale(Locale.US); while(in.hasNextFloat()) { System.out.println(in.nextFloat()); } } } 0.0020 1.6 19.0 2.25 25.0
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
Quote:
ma se volessi utilizzare il vecchio codice c'è un modo per saltare le righe vuote, inoltre come impostare nel tuo codice la lettura automatica del file c:\documenti\esempio.txt grazie ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Prendi una riga alla volta, verifichi se la sua lunghezza è maggiore di zero. Se è zero allora la riga non contiene caratteri.
Codice:
for(String line = fileIn.readLine(); line != null; line = fileIn.readLine()) { if(line.length() > 0) { float x = Float.parseFloat(line); } } Scanner in = new Scanner(new File(args[0])); tu scriveresti: Scanner in = new Scanner(new File("c:\\documenti\\esempio.txt"));
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
ma perchè hai utilizzato Locale.US e non ITALY, perchè i numeri utilizzano il punto?
grazie!!! ![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Sì, per via del punto. A dirla tutta che io sappia anche in italia si usa il punto per separare i decimali dal resto (sicuramente lo si fa in notazione valutaria) ma si vede che pensavo male
![]()
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
nel caso dell'euro però usiamo la virgola
![]() ma integrando il codice for(String line = fileIn.readLine(); line != null; line = fileIn.readLine()) { if(line.length() > 0) { float x = Float.parseFloat(line); } } poi posso eseguire sempre le operazioni? |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi fare tutto quello che ti viene in mente. Il problema è quasi sempre il come.
Ad esempio se l'esercizio dice di sommare al primo valore 10 e moltiplicare il secondo per 5 allora risolvi la cosa con un boolean. Codice:
float primoNumero = 0; float secondoNumero = 0; boolean interruttore = false; legge una riga se la riga non è vuota e (interruttore == false) primoNumero = Float.parseFloat(riga); interruttore = true; altrimenti se la riga non è vuota e (interruttore == true) secondoNumero = Float.parseFloat(riga); break;//esce dal ciclo di lettura primoNumero += 10; secondoNumero *= 5; Se invece devi esaminare i valori a coppie finchè non hai finito di leggere il file allora la cosa è un pelo diversa. Non molto ma un po' sì.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
dovrei leggere tutto, applicando poi operazioni diverse ai 5 numeri!!!
![]() grazie!!! ![]() |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
(A)Se sai già quanti numeri troverai nel file, che siano cinque, sette o due, è un conto. (B)Se invece l'esercizio dice che non è nota la quantità di numeri, è un altro.
A o B ? ![]()
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Per rilevare una riga vuota fra due valori basta intercettare il carattere speciale '\n' che equivale ad un "a capo". Metti un if che fa il controllo dello \n e se è un a capo salta e legge la prossima riga, altrimenti il file è finito e readLine() restituisce null.
Chiaramente per fare ciò è opportuno utilizzare un ciclo while correttamente. es.: String line = in.readLine(); Codice:
while(line!=null){ if (line.equals("\n")) line=in.readLine(); operazione sulla stringa line = in.readLine(); } |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Secondo la documentazione il metodo readLine di BufferedReader scarta il carattere \n
"A String containing the contents of the line, not including any line-termination characters" il controllo if(line.equals("\n")) potrebbe non dare i risultati sperati.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
i numeri da leggere sono 5 ...
grazie a tutti!!! ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:51.