ورود

View Full Version : انجام عملیات روی فایل حجیم csv



baran_kaveer
سه شنبه 13 تیر 1391, 23:54 عصر
سلام دوستان.
من یک فایل csv دارم و می خوام این فایل را توی جاوا بخونم و روش یکسری query اجرا کنم .مشکل اولم اینه که این فایل خیلی خیلی حجیمه و موقع اجرا eclips هنگ می کنه و پیغام میده من کد زیر را که میانگین گرفتن ساده از سومین عنصر هر ردیف هست، روی یک فایل کوچیک امتحان کردم و جواب گرفتم ولی نمی دونم چه طور می تونم مشکل حافظه را حل کنم .
ممنون می شم اگر هر چه زود تر راهنمایی کنید.
تا الان فهمیدم که می شه از hashmap یا بافر استفاده کرد ولی نحوه اصلاح کد را بلد نیستم

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Mu {

public void Computemu()
{
String filename="testdata.csv";//I should change it to BX-Book-Rating later
File file=new File(filename);
try {
Scanner inputstream=new Scanner(file);//Scanner read only string
// String data=inputstream.next();//Ignore the first line(header)
double sum=0;
double numberOfRating=0;

while (inputstream.hasNext())
{
String data=inputstream.next();//get a whole line
String[] values= data.split(";");//values separate by;
double rating=Double.parseDouble(values[2].replaceAll("\"", ""));//change value to string
if(rating>0)//do not consider implicit ratings
{
sum+=rating;
numberOfRating++;
}
}
inputstream.close();
System.out.println("Mu is"+ (sum/numberOfRating));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

}

منتظر راهنمایی شما هستم :)

spiderman200700
چهارشنبه 14 تیر 1391, 02:41 صبح
سلام دوست عزیز.
امتحان کنید ببینید کار میکنه یا نه:

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Mu {

public void Computemu() {
String filename = "testdata.csv";//I should change it to BX-Book-Rating later
File file = new File(filename);
try {
BufferedReader inputstream = new BufferedReader(new FileReader(file));//Scanner read only string
// String data=inputstream.next();//Ignore the first line(header)
double sum = 0;
double numberOfRating = 0;

String line = null;
while ((line = inputstream.readLine()) != null) {
String[] values = line.split(";");//values separate by;
double rating = Double.parseDouble(values[2].replaceAll("\"", ""));//change value to string
if (rating > 0)//do not consider implicit ratings
{
sum += rating;
numberOfRating++;
}
}
inputstream.close();
System.out.println("Mu is" + (sum / numberOfRating));
} catch (IOException ex) {
Logger.getLogger(Mu.class.getName()).log(Level.SEV ERE, null, ex);
}

}
}

baran_kaveer
سه شنبه 20 تیر 1391, 10:03 صبح
ممنون spiderman200700 (http://barnamenevis.org/member.php?133001-spiderman200700) عزیز .
به خط Logger.getLogger(Mu.class.getName()).log(Level.SEV ERE, null, ex); ایراد می گیره واسه همین نتونستم اجرا کنم.
:(

spiderman200700
سه شنبه 20 تیر 1391, 10:41 صبح
اون خط رو حذف کنید و جاش اینو بنویسید:
ex.printStackTrace();