Condividi:        

suddividere un file di dati

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Postdi BianConiglio » 07/09/07 13:07

ventus85 ha scritto:
BianConiglio ha scritto:un for, un if e un BufferedWriter :D
:?:


tu hai i valori no?

for i valori della corrente entita', if il valore corrente e' il secondo, printalo o stampalo o salvalo...insomma, quello che vuoi :D
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Sponsor
 

Postdi ventus85 » 08/09/07 13:24

Pensata:
1)salvo sul buffer come è nel codice che ha posto mrblue prima e ottengo che ogni elemento è una riga del file
2) faccio due cicli, uno esterno con indice i ed uno interno con k.
2a) Predo l'i-esimo elemento del buffer e lo splitto con la virgola.
2b) gli elementi splittati sono salvato a loro volta su un array (visto che uso lo split).
2c) prendo il k-esimo elemento di quest'ultimo array e lo butto su un file, magari chiamato file_k.
Così mi ritrovo 19 file, ognuno con la sua lista.
Provo a metterlo in pratica, come idea non mi sembra così malsana... :mmmh:
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi BianConiglio » 08/09/07 22:34

vai vai, smanetta :D
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Postdi ventus85 » 09/09/07 17:28

BianConiglio ha scritto:vai vai, smanetta :D

Ironia o invito? Scherzo!!!!
Comunque ci si prova!!! :)
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi BianConiglio » 09/09/07 17:58

non sono quasi mai sarcastico :D

buona programmazione! facci sapere
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Postdi mrblue » 10/09/07 11:03

potresti risparmiarti un ciclo inserendo nell'arraylist non la riga ma l'array gia splittato
Sbagliare è umano, ma per riuscire davvero a incasinare completamente le cose ci vuole un computer.
---------------------
http://mrblue73.blogspot.com/
mrblue
Utente Senior
 
Post: 364
Iscritto il: 22/10/01 01:00
Località: Roma

Postdi ventus85 » 10/09/07 14:56

mrblue ha scritto:potresti risparmiarti un ciclo inserendo nell'arraylist non la riga ma l'array gia splittato


Si, ci avevo pensato, ma mi è venuto in mente che poi facevo casino a tirare fuori l'n-simo elemento di ogni istanza...però pensandoci bene, non c'è bisogno di fare casino, basta tirare fuori i numeri giusti (es. 3,22,31 ecc ecc)
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi mrblue » 10/09/07 15:23

giaa
poi se proprio vuoi fare una cosa bella e pulita ti fai un oggettino che "sa" a quale campo corrisponde quale istanza e non ti serve ricordare gli indici dell'array ma solo il pattern giusto (che magari puoi mettere in un file di property)
Sbagliare è umano, ma per riuscire davvero a incasinare completamente le cose ci vuole un computer.
---------------------
http://mrblue73.blogspot.com/
mrblue
Utente Senior
 
Post: 364
Iscritto il: 22/10/01 01:00
Località: Roma

Postdi ventus85 » 11/09/07 08:37

A parte che ho lasciato qualcosa che non serve.
Con lo StringToken ottengo la stessa cosa.
Ovvero: il file colonna_k mi restituisce il k-elemento ma solo dell'ultima riga.
Diciamo che ci sono quasi.

Codice: Seleziona tutto
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
// import java.util.StringTokenizer;

public class Partition {
   private File fileOrig=null;
   private ArrayList<String> listClassi=null;
   public int[] splitSize={50,25,25};
   
   public static void  main(String[]args)
   {
      Partition nnp=new Partition(new File("segment.all"));
      nnp.execute();
   }
   
   public Partition(File fileOrig) {
      super();
      this.fileOrig = fileOrig;
      this.listClassi = new ArrayList<String>();
   }
   
   public void execute()
   {
      try {
         readFile();
         int posInitial=0;
         
         for (int i : splitSize) {
            int cicle=0;
            File file=new File("file_"+posInitial);
            BufferedWriter out = new BufferedWriter(new FileWriter(file));
              int size=listClassi.size()*i/100;
                           
            while(cicle<size)
            {
               out.write(listClassi.get(posInitial+(cicle++))+"\n");
            }
            out.close();
            posInitial+=size;
            /* ******************* */
            for (int j=0;j<2310;j++) {
          String lineasingola= listClassi.get(j);
            for (int k=0;k<19;k++) {
             String[] lineasplittata=lineasingola.split(",");
             File colonna=new File ("colonna_"+k);
             BufferedWriter colonnaout = new BufferedWriter(new     
                                                FileWriter(colonna));
             colonnaout.write(lineasplittata[k] +"\n");
              colonnaout.close();
                 }
          }
        }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   
   private void readFile() throws Exception
   {       
        BufferedReader rd = new BufferedReader(new FileReader(fileOrig));
        String line = null;
        int count=0;
        while ((line = rd.readLine()) != null) {
           listClassi.add(line);
           count++;
        }
      }

}
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 11/09/07 09:37

Credo sia sbagliato nel ciclo, infatti ho messo la creazione dentro il ciclo e quindi se ho capito bene ogni volta ricrea i file e ci mette i dati della riga corrente...
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 11/09/07 09:55

Invertendo i due cicli la cosa da una parte migliora perchè riesco a salvare i dati per colonna, da una parte peggiora perchè non salva tutti i 2310 valori,i primi due file aggiunge un numero all'inizio (aggiunge il primo numero però troncato al unto decimale) e altri file non sono salvati correttamente (uno rimane vuoto).
Codice: Seleziona tutto
 for (int k=0;k<19;k++) {
         File colonna=new File ("colonna_"+k);
         BufferedWriter colonnaout = new BufferedWriter(new
                                  FileWriter(colonna));
         for (int j=0;j<2310;j++) {
             String lineasingola= listClassi.get(j);
               String[] lineasplittata=lineasingola.split(",");
             colonnaout.write(lineasplittata[k] +"\n");
             colonnaout.append(lineasplittata[k]);
                 }
              }
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 11/09/07 11:20

Rettifico quello che ho detto nell'ultimo post, viene per esempio:
Codice: Seleziona tutto
218.0
218.0113.0
113.0202.0
202.032.0

cioè prende il primo elemento, poi il primo con attaccato il secondo, il secondo con il terzo ecc ecc
se uso colonnaout.append(lineasplittata[k]+ "\n"); mi vengono bellini uno sotto l'altro ma doppi e questo credo sia perchè ho scritto
Codice: Seleziona tutto
  colonnaout.write(lineasplittata[k] +"\n");
   colonnaout.append(lineasplittata[k]+ "\n");

se tolgo uno dei due mi viene il file vuoto. :(
E comunque rimane il fatto che il file colonna_2 in qualunque caso rimane vuoto e questa cosa mi sembra molto molto strana. :eeh:
:?:
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 11/09/07 11:42

Così sembra funzioni.
Codice: Seleziona tutto
import java.io.BufferedReader; import java.io.BufferedWriter;
import java.io.File; import java.io.FileReader;
import java.io.FileWriter; import java.util.ArrayList;

public class Partition {
   private File fileOrig=null;
   private ArrayList<String> listClassi=null;
   public int[] splitSize={50,25,25};
   
   public static void  main(String[]args)   {
      Partition nnp=new Partition(new File("segment.all"));
      nnp.execute();
   }
   
   public Partition(File fileOrig) {
      super();
      this.fileOrig = fileOrig;
      this.listClassi = new ArrayList<String>();
   }
   
   public void execute()  {
      try {
         readFile();
         int posInitial=0;
         
         for (int i : splitSize) {
            int cicle=0;
            File file=new File("file_"+posInitial);
            BufferedWriter out = new BufferedWriter(new FileWriter(file));
              int size=listClassi.size()*i/100;
            while(cicle<size) {
               out.write(listClassi.get(posInitial+(cicle++))+"\n");
            }
            out.close();
            posInitial+=size;
            /* ******************* */
                     
               for (int k=0;k<19;k++) {
                File colonna=new File ("colonna_"+k);
                BufferedWriter colonnaout = new BufferedWriter(new
               FileWriter(colonna));
              
               for (int j=0;j<2310;j++) {      
                   String lineasingola= listClassi.get(j);
                String[] lineasplittata=lineasingola.split(",");
                colonnaout.write(lineasplittata[k] +"\n");
                   }
               colonnaout.close();
                      }
        }
      } catch (Exception e) {
          e.printStackTrace();
      }
   }
   
   private void readFile() throws Exception   {       
        BufferedReader rd = new BufferedReader(new FileReader(fileOrig));
        String line = null;
        int count=0;
        while ((line = rd.readLine()) != null) {
           listClassi.add(line);
           count++;
        }
    //  System.out.println(listClassi);
    //  System.out.println(listClassi.size());
   }

}
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 27/09/07 14:21

Se volessi dopo la suddivisione (quella in tre file o quella per colonne), sommare ai valori degli elementi dei nuovi file un numero (tipo valore=valore_vecchio_letto+10) mi da errore perchè ho dei tipi String e il cast da String a int o double Java non lo consente.
Come posso fare?
Grazie ancora!
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi BianConiglio » 27/09/07 14:56

new Integer(StringParametro).intValue();
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Postdi ventus85 » 27/09/07 15:01

BianConiglio ha scritto:new Integer(StringParametro).intValue();

Ah, bene, dopo lo provo!
Grazieeeeeeee!
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 28/09/07 18:29

L'ho provato in un programma a se e tutto ok, ma l'ho provato nel codice che ho posto qualche post fa e mi dà questo errore:
Codice: Seleziona tutto
java.lang.NumberFormatException: For input string: "218.0"
at java.lang.NumberFormatException.forInputString(Unknown Source)
   at java.lang.Integer.parseInt(Unknown Source)
   at java.lang.Integer.<init>(Unknown Source)
   at Partition.execute(Partition.java:47)
   at Partition.main(Partition.java:12)

(dove 218 è il primo numero presente nel file)
Sembra abbia dei problemi nello splittare...
Questo è il codice sopra modificato
Codice: Seleziona tutto
for (int j=0;j<2310;j++) {
String lineasingola= listClassi.get(j);
String[] lineasplittata=lineasingola.split(",");
int nuovo;
nuovo= new Integer(lineasplittata[k]).intValue();
System.out.println(nuovo+"\n");
// colonnaout.write(lineasplittata[k]+"\n");
}

Ora riprovo...
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi ventus85 » 28/09/07 19:52

Anzi, rettifico anche l'altro non funziona bene.
Codice: Seleziona tutto
import java.io.*;

public class convertire {
   
   public static void main(String[] args) throws IOException {
           File inputFile=new File ("colonna_0");
           File outputFile=new File ("nuova_0");
           BufferedReader in= new BufferedReader (new FileReader (inputFile));
           BufferedWriter out= new BufferedWriter (new FileWriter (outputFile));
           while ((in.ready()))
            out.write (new Integer(in.read()).intValue()+10);
            //   out.write (in.read());
         in.close();
         out.close();
      }
}

Però quando vado ad aprire il file creato non ho il valore più dieci bensì dei caratteri strane, tipo
<;B8:;;=8:<:<8:=<8:@;8:;>
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

Postdi mrblue » 01/10/07 10:53

Se devi lavorare con i numeri devi convertirli bene: 218.0 non è un numero!!
probabilmente stai utilizzando il local Italy dove il separatore dei decimali è la virgola.
ad ogni modo gli Integer non hanno decimali (sono interi)
per quanto riguarda la scrittura su file, ma sei sicura di quello che leggi??
prova a stampare su console (system.out)
Sbagliare è umano, ma per riuscire davvero a incasinare completamente le cose ci vuole un computer.
---------------------
http://mrblue73.blogspot.com/
mrblue
Utente Senior
 
Post: 364
Iscritto il: 22/10/01 01:00
Località: Roma

Postdi ventus85 » 01/10/07 20:40

mrblue ha scritto:Se devi lavorare con i numeri devi convertirli bene: 218.0 non è un numero!!
probabilmente stai utilizzando il local Italy dove il separatore dei decimali è la virgola.
ad ogni modo gli Integer non hanno decimali (sono interi)
per quanto riguarda la scrittura su file, ma sei sicura di quello che leggi??
prova a stampare su console (system.out)


No, per il separatore il file ha il punto e non la virgola.
Hai ragione, sono interi! Che stupida!! :roll:
Born in the wind, born to be wild!
Avatar utente
ventus85
Utente Senior
 
Post: 327
Iscritto il: 05/07/06 09:36

PrecedenteProssimo

Torna a Programmazione


Topic correlati a "suddividere un file di dati":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti