Entra

View Full Version : [Java] importare dati da file in una matrice


ka0s
18-05-2006, 14:47
Ho un file di testo di questo tipo (ad es. chiamato "file1.txt"):

1 2 3
4 5 6
7 8 9

vorrei sapere qual'è il modo, una volta memorizzati i singoli numeri, per inserirli in una matrice di tipo [][]. In parole povere mi serve sapere il procedimento per far si che il programma inserisca tutti gli elementi letti dal file.

grazie!! :)

andbin
18-05-2006, 15:04
Ho un file di testo di questo tipo (ad es. chiamato "file1.txt"):

1 2 3
4 5 6
7 8 9

vorrei sapere qual'è il modo, una volta memorizzati i singoli numeri, per inserirli in una matrice di tipo [][]. In parole povere mi serve sapere il procedimento per far si che il programma inserisca tutti gli elementi letti dal file.Ci sono molti modi per fare questa cosa. Dipende ... hai bisogno di una soluzione generica (poter leggere da un file qualunque matrice di n x m elementi) oppure specifica a questa 3 x 3 che hai indicato???
I numeri sono tutti interi??

ka0s
18-05-2006, 15:18
matrice generica n x m ed i numeri sono misti ma vanno trattati tutti come double.

andbin
18-05-2006, 16:08
matrice generica n x m ed i numeri sono misti ma vanno trattati tutti come double.Bene, posso descriverti, a grandi linee, cosa farei io:
a) Creerei un metodo che prende in input un File e restituisce un double[][].
b) Userei un BufferedReader (concatenato a un FileReader) per leggere le righe.
c) Userei un ArrayList<double[]> per contenere una lista di array (per la prima fase).
d) Per ogni riga userei un StringTokenizer per spezzare i valori di una singola riga che poi converto in double e metto in un array double[] (che poi aggiungo alla lista).
e) Creerei un nuovo array double[][] in cui metto tutti i singoli array presi nella fase prima.

L'unica cosa a cui stare attenti è il controllo della correttezza della matrice: deve cioè essere rettangolare!

In tutto, dovrebbero venire meno di 50 righe di codice.

franksisca
18-05-2006, 16:13
allora, per leggere da file fai tutto con un buffereReader, nele api ci sono le specificjhe che ora nn ricordo :D :D :D

poi su questo buffereReader fai una readLine e poi questa Stringa la tokenizzi sugli spazi.


a codice...+o-
BuffereReader br= new BufferedReader(file);//file è il percorso, anche se mi sembra che bufferedReader vogia un fileReader come parametro, cmq vedi le API
Strin linea=br.readLine();
StringTokenizer st= new StringTokenizer(linea," ");
while(st.hasMoreTokens()){
matrice[i][j]=Double.parseDouble(st.nextyToken());
}

con i dovuti accorgimenti dovrebbe funzionare.

franksisca
18-05-2006, 16:15
ecco cosa succede ad aprire la risposta e scriverla dopo 10 minuti, che arriva qualcuno e ti frega il posto :D :D :D :D
comunque andbin, sono d'accordo con la tua idea, abbbastanza lineare (che poi sono le cose migliori;)) ma ottima.

ka0s
18-05-2006, 19:47
ok grazie!! :)
nel frattempo io avevo provato dividendo le righe in tanti "pezzetti" con StringTokenizer, solo che appunto non riuscivo a mettere ogni valore nella posizione giusta...
com'è che si implementerebbe il punto "e" ?

andbin
18-05-2006, 20:19
ok grazie!! :)
nel frattempo io avevo provato dividendo le righe in tanti "pezzetti" con StringTokenizer, solo che appunto non riuscivo a mettere ogni valore nella posizione giusta...
com'è che si implementerebbe il punto "e" ?Beh, non è difficile, te lo spiego subito.
L'obiettivo è quello di creare (finalmente) un array bidimensionale. Quindi si procede così:
double[][] array2d = new double[dimension1][];Supponendo, come ho detto prima, di usare un ArrayList<double[]>, il valore di dimension1 è la dimensione di questo ArrayList.
Quindi poi molto semplicemente:
for (int i = 0; i < dimension1; i++)
array2d[i] = arrList.get (i);
A quel punto l'array2d è pieno e completo!

ka0s
18-05-2006, 20:24
grazie mille!!!!
proverò così ;)