Newsgroup: it.comp.java
Titolo: Leggere double o float da files

Salve a tutti.
Ho un problemino...
Il file "pippo.dat" contiene un elenco di numeri double che vorrei
leggere ed inserire in vettori.
A tale scopo, l'unico metodo che ho trovato utile è stato
"readDouble()" (vedi porzione di codice sottostante).
Il problema è che se stampo a video i valori ottenuti con tale metodo
(vedi codice sottostante), mi accorgo che essi sono completamente
differenti da quelli presenti nel file "pippo.dat". L'unica soluzione
per ovviare a questo problema sarebbe quella di scrivere il file
"pippo.dat" mediante il metodo writeDouble(), ma non voglio optare per
questa soluzione: il mio file proviene da un ambiente esterno a Java,
non può essere scritto mediante Java.
In C, leggere numeri da files (di ogni tipo) è molto semplice. La
lettura può, inoltre, essere anche controllata da spazi, tabulazioni o
virgole.
Come si fa in Java?
Grazie.
Cat
....
FileInputStream file = new
			FileInputStream ("pippo.dat");
                        BufferedInputStream buff = new
                        BufferedInputStream(file);
                        DataInputStream data = new
                        DataInputStream(buff);
 
                        try {
                            while (true) {
				double input = data.readDouble();
				System.out.print(input + " ");
                            }
                        } catch (EOFException eof) {
                            buff.close();
                        }  
.....

Bisognerebbe che tu ci dicessi esattamente come è formattato il file
piipo.dat. Senza sapere come sono memorizzati i tuoi numeri non è ovvimanete
possibile sapere come si possono leggere...
Oltre a questo stai attento ad eventuali shift: se all'inizio del tuo file
ci fosse qualche byte di header e tu non en tenessi conto ovviamente non
funzionerebbe nula... anzi, funzionarebbe, ma i valori sarebbero molto
"casuali"!
Ciao
Giacomo

 leggere ed inserire in vettori.
Provo a suggerire un'altra strada:
***************************************
ArrayList container = new ArrayList();
BufferedReader reader = new BufferedReader(new FileReader("pippo.dat"));
String input = reader.readLine();
StringTokenizer tokenizer = new StringTokenizer(input);
 while(tokenizer.hasMoreTokens())
 {
   String token = tokenizer.nextToken();
   double in = Double.parseDouble(token);
   container.add(in);
 }
reader.close();
***********************************************
Ricordati che il metodo che contiene readLine() deve dichiarare throws
IOException e che a fare Double.parseDouble se token non è un numero ti
lancerà NumberFormatException (ma è tutto tranquillamente gestibile).
Non l'ho passato dentro l'ide, ma il codice che ti ho postato di solito è lo
scheletro di quello che uso per passare stringhe lunghe, per cui a parte
eventuali errori di ortografia dovrebbe essere funzionante.
-- 
Ciao. Fabrizio.
(icq:241182067) 
http://groups.yahoo.com/group/jug_brescia/
< MISTAH KURTZ -- HE DEAD.
   A penny for the Old Guy>  (T.S. Elliot: the hollow men)

 Giacomo
Grazie innanzitutto.
Nel file .dat ho scritto semplicemente la seguente riga (all'inizio
del file e senza lasciare nessuna riga):
32.45 45.75 67.8304
poi ho salvato il file.
Invece a video viene stampato:
4.41943087734071E-62 4.6664867160210266E-86
Se nel file scrivo soltanto:
32.45
a video viene stampata una riga vouta cioč:
C:\.....
riga vuota
C:\.....
Grazie ancora.
Cat

 32.45 45.75 67.8304
Ma hai scritto... come? Spero non con un'editor di testo, senno č chiaro che
ti esce un troiaio!
Non so usare i termini tecnici giuti, ma per poterlo leggere col metodo da
te usato deve essere scritto come stream di double, cioč una sequenza di
byte a gruppi di 8: in ogni gruppo, se non sbaglio, 52 bit sono dedicati
alla "mantissa" e 12 all'esponente... piů o meno!
Se invece scrivi il file come hai detto tu, questi vengono memorizzati come
sequanza di caratteri, e a livello concettuale fra scrivere "
ab.hr
" (che
chiaramente non č un numero) e scrivere "34.21" non c'č nessuna differenza:
leggere una sequenza di caratteri come se fosse una sequanza di double
equivale a leggere un testo in inglese pensando che le parole siano in
italiano: non torna niente!
Se scrivi il file come sequanza di caratteri devi, piů o meno, leggere dal
file la stringa e usare su questa metodi tipo "parseDouble" che sono fatti
per ricavare un valore daouble dalla sua rappresentazione in cifre...
Ciao
Giacomo