Mettere in colonna gli elementi di una matrice
Ciao!
Avrei bisogno di un modo per "mettere in colonna gli elementi di una matrice" .
Cioè io ho una cosa del tipo $ {: ( 1 , 2 ),( 3 , 4 ) :} $
e vorrei mi fosse restituito un bel $ {: ( 1 ),( 2 ),( 3 ),( 4 ) :} $
La matrice di partenza è in un file testo e anche il risultato è sufficiente metterlo dentro un file di testo
Avete idea di come potrei fare? Con excell o java tendenzialmente, ma anche matlab (che non so proprio usare
) andrebbe bene. Grazie!
PS a me è venuto in mente che su excell prendo la prima riga ctrl+c, ctrl+v e trasponi e via dicendo. Il problema è che la cosa diventa rognosa al crescere delle righe
Avrei bisogno di un modo per "mettere in colonna gli elementi di una matrice" .
Cioè io ho una cosa del tipo $ {: ( 1 , 2 ),( 3 , 4 ) :} $
e vorrei mi fosse restituito un bel $ {: ( 1 ),( 2 ),( 3 ),( 4 ) :} $
La matrice di partenza è in un file testo e anche il risultato è sufficiente metterlo dentro un file di testo
Avete idea di come potrei fare? Con excell o java tendenzialmente, ma anche matlab (che non so proprio usare

PS a me è venuto in mente che su excell prendo la prima riga ctrl+c, ctrl+v e trasponi e via dicendo. Il problema è che la cosa diventa rognosa al crescere delle righe
Risposte
L'idea di base è di leggere un numero per volta da file ignorando gli spazi e poi scrivere su un altro file lo stesso numero seguito da uno spazio. Si può anche fare semplicemente sostituendo nel file qualsiasi sequenza di spazi con un carattere per andare a capo. Qualsiasi editor di testo decente dovrebbe permettertelo.
Grazie! La seconda soluzione è molto semplice ed ha funzionato!
Posso chiederti, se hai tempo, di approfondire la prima strategia? Perché in realtà questa era solo una parte del trattamento dati che vorrei automatizzare.
In particolare non sono riuscito a trovare un modo per "leggere un numero per volta": hai un metodo da potermi suggerire? Cioè io ho questi numeri messi sparsi su un file di testo in matrici di forma differente, ma secondo una logica, e mi tornerebbe utile poter usare quella logica per memorizzarli in "array" (?) diversi così poi da poterli riorganizzare
Grazie ancora per il tempo!
Posso chiederti, se hai tempo, di approfondire la prima strategia? Perché in realtà questa era solo una parte del trattamento dati che vorrei automatizzare.
In particolare non sono riuscito a trovare un modo per "leggere un numero per volta": hai un metodo da potermi suggerire? Cioè io ho questi numeri messi sparsi su un file di testo in matrici di forma differente, ma secondo una logica, e mi tornerebbe utile poter usare quella logica per memorizzarli in "array" (?) diversi così poi da poterli riorganizzare
Grazie ancora per il tempo!

In Java useresti la classe Scanner per leggere un valore power volta dal file e poi scrivi immediatamente tale valore in un secondo file..
Allora, grazie, ho provato in questo modo: della classe scanner userei il metodo nextLine() per leggere la riga successiva in formato stringa, poi a questa applicherei il metodo split(carattereSeparatore) per dividerla nei numeri di mio interesse e li memorizzerei, previo parseInt, nel mio array che sto scandendo.
E alcune volte funziona.
Solo che nella mia tabella il carattereSeparatore non è sempre lo stesso: per esigenze di tabulazione sono stati inseriti tre spazi se il numero successivo ha tre cifre, quattro se ne ha due. E in questo caso mi dà errore. Credo per questo fatto degli spazi. Suggerimenti?
E alcune volte funziona.
Solo che nella mia tabella il carattereSeparatore non è sempre lo stesso: per esigenze di tabulazione sono stati inseriti tre spazi se il numero successivo ha tre cifre, quattro se ne ha due. E in questo caso mi dà errore. Credo per questo fatto degli spazi. Suggerimenti?
In realtà pensavo all'utilizzo di nextInt() o nextDouble() per leggere i numeri (a seconda di che tipo di numeri sono). Se usi nextLine stai leggendo una riga intera che potrebbe quindi contenere numerosi numeri.
Grazie mille, apatriarca!
Effettivamente il nextInt() è la scelta migliore. Mi avrebbe evitato venerdì di perdere tutto quel tempo con la divisione delle stringhe; non so perché il testo che seguivo si inerpicava per quella soluzione senza nemmeno citare il metodo nextInt()
Non vorrei abusare del tuo tempo se mi permetto di chiederti un'altra cosa minore. Il nextInt() svolge egregiamente il suo ruolo ma mi dà errore se i numeri nel mio file di partenza sono seguiti da punti come caratteri divisori. In quel caso se preprocesso il file con un editor di testo e faccio sostituisci tutto non ci sono problemi; conosci un modo per farlo in automatico direttamente dal mio programma?
da una veloce ricerca online trovo una cosa di questo tipo
BufferedReader rdr = new BufferedReader(new InputStreamReader(new FileInputStream(FILE)));
BufferedWriter wrt = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE)));
String line=rdr.readLine();
while(line!= null){
line=line.replaceAll(".","");
wrt.append(line);
wrt.newLine();
line = rdr.readLine();}
è secondo te la cosa più semplice? Nel programma io ho per leggere/scrivere oggetti di tipo scanner/printwriter; in questa soluzione, se capisco bene, me ne farebbe definire di nuovi e non mi è proprio chiaro perché
EDIT: che comunque ho appena provato e non funziona: mi cancella tutto il file. Ora tento di capire perché...
Effettivamente il nextInt() è la scelta migliore. Mi avrebbe evitato venerdì di perdere tutto quel tempo con la divisione delle stringhe; non so perché il testo che seguivo si inerpicava per quella soluzione senza nemmeno citare il metodo nextInt()

Non vorrei abusare del tuo tempo se mi permetto di chiederti un'altra cosa minore. Il nextInt() svolge egregiamente il suo ruolo ma mi dà errore se i numeri nel mio file di partenza sono seguiti da punti come caratteri divisori. In quel caso se preprocesso il file con un editor di testo e faccio sostituisci tutto non ci sono problemi; conosci un modo per farlo in automatico direttamente dal mio programma?
da una veloce ricerca online trovo una cosa di questo tipo
BufferedReader rdr = new BufferedReader(new InputStreamReader(new FileInputStream(FILE)));
BufferedWriter wrt = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE)));
String line=rdr.readLine();
while(line!= null){
line=line.replaceAll(".","");
wrt.append(line);
wrt.newLine();
line = rdr.readLine();}
è secondo te la cosa più semplice? Nel programma io ho per leggere/scrivere oggetti di tipo scanner/printwriter; in questa soluzione, se capisco bene, me ne farebbe definire di nuovi e non mi è proprio chiaro perché

EDIT: che comunque ho appena provato e non funziona: mi cancella tutto il file. Ora tento di capire perché...
Allora, credo di aver capito il problema. Il fatto era che non esisteva una stringa "." ma un carattere '.'.
Fatto sta che ho scritto questo che, non so se è la soluzione più elegante, ma funge: in pratica crea un nuovo file uguale al primo tranne per i punti. E poi su questo vado ad applicare il programma che ho scritto grazie al tuo aiuto, di cui ti sono immensamente grato.
String fileIn = "p4";
Scanner inputStream = new Scanner(new File(fileIn));
String line;
PrintWriter outputStream = new PrintWriter(fileIn+"m");
while (inputStream.hasNextLine())
{
line = inputStream.nextLine();
line=line.replace('.', ' ');
outputStream.println(line);
}
Ancora grazie!
Fatto sta che ho scritto questo che, non so se è la soluzione più elegante, ma funge: in pratica crea un nuovo file uguale al primo tranne per i punti. E poi su questo vado ad applicare il programma che ho scritto grazie al tuo aiuto, di cui ti sono immensamente grato.
String fileIn = "p4";
Scanner inputStream = new Scanner(new File(fileIn));
String line;
PrintWriter outputStream = new PrintWriter(fileIn+"m");
while (inputStream.hasNextLine())
{
line = inputStream.nextLine();
line=line.replace('.', ' ');
outputStream.println(line);
}
Ancora grazie!
