Problema di vettori in java

SenzaCera
Buonasera a tutti.
Ho un problema che mi sta assillando.
Ho un file .txt così fatto :

CODA TESTA PESO
1 ..
2
.
.
409.556 ETC.

In pratica sotto CODA , TESTA e PESO ho 409.556 valori incolonnati.
Diciamo che devo trattarli come vettori in java. Il problema è che non riesco a scrivere tre vettori e metterci quei valori perchè non riesco a selezionare una sola colonna.
Mi spiego meglio:

// Dichiaro il vettore CODA
int [] CODA { qui dentro devo mettere i 409.556 valori sotto la colonna CODA};
int[] TESTA{ come sopra sotto la colonna TESTA};

Ovviamente scrivere a mano $409556*3$ valori mi sembra un pò laborioso.

Qualche idea?
Spero di essermi spiegato!!!

Risposte
hamming_burst
Non vedo nulla di troopo complicato.

Immagazzini una frase in un StringBuffer, con StringTokanizer separi i tre numeri.
Per ogni numero lo salvi in una variabile wrapper e usi una funzione dell'oggetto per trasformarlo in un Integer (vettore di Integer è meglio che vettore primitivo), e lo salvi nella posizione corretta.
Tutto questo lo metti in un semplice ciclo while, che esce quando è arrivato alla posizione 400.000 e passa.
Qua ci sarà da inserire qualche guardia, tipo se il valore non esiste...

non è difficile, spero sia chiaro, se no siamo qua :-)

SenzaCera
Allora i valori sono separati da semplici spazi.
Per quanto riguarda la risposta di ham..ehm non ho molta dimistechezza con lettura da file in java :-) (in realtà questi dati dovrei usarli per un altro linguaggio che si chiama AMPL ).
Poi non capisco cosa tu intenda per separare i tre numeri!

apatriarca
E perché se poi usi un altro linguaggio stai passando attraverso Java che non sembri conoscere molto? L'idea, già espressa da ham_burst è quella di leggere una riga per volta e poi usare una classe per dividerne le parole. Converti poi queste parole in numeri interi. La stessa idea è normalmente applicabile ad altri linguaggi (anche molto diversi come Haskell).

P.S. Non ho mai sentito parlare di AMPL, di che tipo di linguaggio si tratta?

xsl
"SenzaCera":
Allora i valori sono separati da semplici spazi.
Per quanto riguarda la risposta di ham..ehm non ho molta dimistechezza con lettura da file in java :-)


Ti ho preparato un esempio per la lettura dei file in java che fa al caso tuo:
/**
 * @(#)FileReader.java
 *
 *
 * @author xsl
 * @version 1.00 2010/12/23
 */
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;

public class FileReader {
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    	
        File reading = new File("reading.txt"); //File da leggere
        InputStreamReader reader = null;
        try{
        	reader = new InputStreamReader( new FileInputStream(reading) ); //legge bytes li decodifica in caratteri usando il charset predefinito
        }catch(FileNotFoundException e){
        	e.printStackTrace();
        	System.exit(0);
        }
        BufferedReader buffer = new BufferedReader(reader); //legge il testo dallo stream di lettura di caratteri e li bufferizza
        try{
        	String line;
        	while( (line = buffer.readLine()) != null){
        		//operazioni...
        	}
        	reader.close();
        	buffer.close();
        }catch(IOException e){
        	e.printStackTrace();
        }
        
    }
}


Per quanto riguarda la logica dell'applicazione, la difficoltà che questa presenta è minima!
Ti basta splittare/spezzettare ogni riga letta dal file (nel caso dell'esempio: la riga corrente è rappresentata dalla variabile line) secondo il carattere spazio.
Un esempio?
String arraySplit[] = line.split(" ");

Il metodo split() della classe String ti consente di spezzare l'istanza su cui viene invocato secondo l'espressione regolare che gli viene passata come argomento. Nel caso dell'esempio il carattere spazio è una banale regex che viene passata al metodo e secondo la quale viene operato lo split dell'istanza line della classe String dando come risultato un array di stringhe.
Per ulteriori approfondimenti ti rimando alla documentazione ufficiale:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java.lang.String%29

Una volta che hai effettuato lo split sai bene che l'i-esima stringa in arraySplit appartiene all'i-esima classe e quindi ad un determinato array nel quale vai ad inserire i valori che riguardano solo quella determinata classe.

SenzaCera
"apatriarca":


P.S. Non ho mai sentito parlare di AMPL, di che tipo di linguaggio si tratta?


Sto cercando di farlo attraverso java perchè purtroppo non essendoci una letteratura molto vasta sul linguaggio AMPL, ho pensato che avrei trovato molte più info sul mio problema da risolvere.
Comunque AMPL è un linguaggio orientato alla risoluzione di problemi di ottimizzazione: dalla programmazione lineare, passando per quella intera fino a quella non lineare.

Per quanto riguarda xsl grazie mille per la disponibilità non potevo sperare in qualcosa di meglio!!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.