Alla on koodipätkä, jolla kirjoitan lukuisia CSV-tiedostoja. Luen nämä R-ohjelmaan käyttäen read.csv2-komentoa. Ongelma on se, että R-ohjelma lukee oikean määrän sarakkeita ja rivejä, mutta sen mielestä ne ovat tyhjiä. Eli toisin sanoen lukee dataksi vain ison tyhjän datajoukon.
PrintWriter tulos = new PrintWriter(new File("tyyppi_kaikki.csv")); PrintWriter tulosM = new PrintWriter(new File("tyyppi_kaikki_miehet.csv")); PrintWriter tulosN = new PrintWriter(new File("tyyppi_kaikki_naiset.csv")); PrintWriter tulos06 = new PrintWriter(new File("tyyppi_kaikki_06.csv")); PrintWriter tulos712 = new PrintWriter(new File("tyyppi_kaikki_712.csv")); PrintWriter tulos1315 = new PrintWriter(new File("tyyppi_kaikki_1315.csv")); PrintWriter tulos1618 = new PrintWriter(new File("tyyppi_kaikki_1618.csv")); PrintWriter tulos1925 = new PrintWriter(new File("tyyppi_kaikki_1925.csv")); PrintWriter tulos2630 = new PrintWriter(new File("tyyppi_kaikki_2630.csv")); PrintWriter tulos3145 = new PrintWriter(new File("tyyppi_kaikki_3145.csv")); PrintWriter tulos4665 = new PrintWriter(new File("tyyppi_kaikki_4665.csv")); PrintWriter tulos6675 = new PrintWriter(new File("tyyppi_kaikki_6675.csv")); PrintWriter tulos7685 = new PrintWriter(new File("tyyppi_kaikki_7685.csv")); PrintWriter tulos86 = new PrintWriter(new File("tyyppi_kaikki_86.csv")); //int apu=0; int maks=0; //käydään läpi //tänne varastoidaan aina yksi henkilö kaikkien tapahtumien kera. StringBuilder apurivi=new StringBuilder(); for(int i=0;i<henkilot.size();i++){ //System.out.println(henkilot.get(i).toString()); //koska kaatuu, tehdään kahteen eri arraylistiin. tapahtumatlajiteltuna=henkilot.get(i).lajitteleTapahtumat(); //System.out.println("Lajittelun tulos on: " +tapahtumatlajiteltuna.size()); //tehdään tulostukset, mitä tarvitaan tiedostoon for(int j=0;j<tapahtumatlajiteltuna.size();j++){ //markovia varten aloitus ja lopetus tehdään if(j==0){ apurivi.append("alku;"); } apurivi.append(tapahtumatlajiteltuna.get(j).trim()); if((tapahtumatlajiteltuna.size()-j)==1){ apurivi.append("loppu;"); //apurivi.append("\n"); } }//tähän kohtaan loppuu tapahtumatlajiteltuna-looppi, jossa tehdään se arraylisti, joka kirjoitetaan //kirjoitettan. ///tarkastetaan, että ei kirjoiteta tyhjää //System.out.println(apurivi.toString()); tulos.println(apurivi.toString()); //kirjoitetaan miehet. if(henkilot.get(i).getSukupuoli()=="M"){ // System.out.println(apurivi.toString()); tulosM.println(apurivi.toString()); }else{ tulosN.println(apurivi.toString()); } //TÄSTÄ ALKAA IKÄTARKASTELUT! if(henkilot.get(i).getTamanhetkenika()<=6){ tulos06.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=12){ tulos712.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=15){ tulos1315.println(apurivi.toString()); } else if(henkilot.get(i).getTamanhetkenika()<=18){ tulos1618.println(apurivi.toString()); } else if(henkilot.get(i).getTamanhetkenika()<=25){ tulos1925.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=30){ tulos2630.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=45){ tulos3145.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=65){ tulos4665.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=75){ tulos6675.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()<=85){ tulos7685.println(apurivi.toString()); }else if(henkilot.get(i).getTamanhetkenika()>85){ tulos86.println(apurivi.toString()); } if(tapahtumatlajiteltuna.size()>maks){ maks=tapahtumatlajiteltuna.size(); } //System.out.println("Suurin tapahtumamäärä on tällä hetkellä: "+maks); henkilot.get(i).putsaa(); //System.out.println("Menossa henkilö numero: "+(i+1)); //System.out.println(tapahtumatlajiteltuna.size()); /*for(int j=0;j<tapahtumatlajiteltuna.size();j++){ // System.out.println("Menossa henkilö numeroltaan "+i+", joka on: "+henkilot.get(i).getHetu()); System.out.println(tapahtumatlajiteltuna.get(j).toString()); }*/ }//tähän kohtaan loppuu henkilöt-looppi tulos.close(); tulosM.close(); tulosN.close(); tulos06.close(); tulos712.close(); tulos1315.close(); tulos1618.close(); tulos1925.close(); tulos2630.close(); tulos3145.close(); tulos4665.close(); tulos6675.close(); tulos7685.close(); tulos86.close();
Lisäys: Jatkan vielä sen verran, että jos tiedoston avaa esimerkiksi Excelissä ja sitten tallentaa ja sulkee, lukee R ihan oikein, mutta tuo avaa-tallenna-sulje-kikkailu vie vain aikaa vähän turhan paljon.
Kokeile avata csv-tiedosto ensin notepad-ohjelmalla. Sitten tee siitä excelillä toimiva versio. Avaa myös uusi versio notepad-ohjelmalla. Vertaile miten alkuperäinen ja uusi csv-tiedosto eroavat toisistaan.
Sama ongelma esiintyy myös tekstitiedostojen kanssa.
Ongelma ratkesi. Korjautui sijoittamalla StringBuilder for-looopin sisään.
Sivuhuomio: Miksi laitat ikäryhmät Javalla eri tiedostoihin? Voisit tehdä erottelun helposti R:llä.
Metabolix kirjoitti:
Sivuhuomio: Miksi laitat ikäryhmät Javalla eri tiedostoihin? Voisit tehdä erottelun helposti R:llä.
Sen takia, että varsinaiseen tiedostoon ei kirjoteta ikää, vaan sinne vain kirjoitetaan palvelutapahtumaa kuvaavia merkkijonoja, joista voidaan vääntää Markovin ketjuja R:llä. Näin niistä tiedostoista ei tarvitse sitten erotella myöhemmin erilleen niitä ikäkenttiä varsinaisesta datasta.
Lisäksi koen, että dokumentointi ja artikkelien kirjoittaminen on helpompaa, kun jokainen ikäkausi on oma tiedostonaan, eikä niitä käsitellä samasta isosta tiedostosta aina "palasia" ottaen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.