Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: kirjoitettu CSV-tiedosto ei aukea oikein R:ssä

LCHawk [04.08.2016 09:41:02]

#

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.

Jiffy [04.08.2016 10:52:03]

#

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.

LCHawk [04.08.2016 11:55:04]

#

Sama ongelma esiintyy myös tekstitiedostojen kanssa.

LCHawk [04.08.2016 14:29:01]

#

Ongelma ratkesi. Korjautui sijoittamalla StringBuilder for-looopin sisään.

Metabolix [04.08.2016 15:19:20]

#

Sivuhuomio: Miksi laitat ikäryhmät Javalla eri tiedostoihin? Voisit tehdä erottelun helposti R:llä.

LCHawk [05.08.2016 09:32:24]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta