【发布时间】:2015-11-06 14:33:50
【问题描述】:
如何读取 x 行数和 y 列数的 .csv excel 文件,忽略不相关的单元格(例如名称),然后计算每列中数字的平均值?
我的 Excel 是这样的(,表示新单元格):
ID, week 1, week 2, week 3, .... , week 7
0 , 1 , 0.5 , 0 , , 1.2
1 , 0.5 , 1 , 0.5 , , 0.5
y , ......
那么,我该如何让它读取这种 .csv 文件,然后以第 1 周 =(第 1 周平均值)、第 2 周 =(第 2 周平均值)格式计算所有周的平均值?
我是否也正确地假设我需要为此使用二维数组?
编辑 到目前为止,这是我的代码,它非常粗糙,我不确定它是否能正常工作:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ClassAverage {
public static void main(String[] args){
readFile2Array("attendance.csv");
}
public static double[][] readFile2Array(String fileName){
try {
int rowCount = 0;
int colCount = 0;
Scanner rc = new Scanner(new File("attendance.csv"));
while (rc.hasNextLine()) {
rowCount++;
rc.nextLine();
}
rc.close();
System.out.println(rowCount);
Scanner cc = new Scanner(new File("attendance.csv"));
while (cc.hasNext()) {
colCount++;
cc.next();
}
cc.close();
colCount = colCount/rowCount;
System.out.println(colCount);
Scanner sc = new Scanner(new File("attendance.csv"));
double[][] spreadSheet = new double[rowCount][colCount];
while (sc.hasNext()) {
for (int i=0; i<spreadSheet.length; ++i){
for (int j=0; j<spreadSheet[i].length; ++j){
spreadSheet[i][j] = Double.parseDouble(sc.next());
}
}
}
sc.close();
return spreadSheet;
} catch (FileNotFoundException e) {
System.out.println("File cannot be opened");
e.printStackTrace();
}
return null;
}
public static double weeklyAvg(double[][] a){
}
}
所以总结一下它打算做什么
readFile2Array:读取csv文件并计算行数,然后计算单元格总数,将单元格总数除以行数得到列数。再次读取并将每个单元格放入二维数组中的正确位置。
weeklyAvg:我还没有想出办法来做到这一点,但它应该逐列读取数组并计算每列的平均值,然后打印出结果。
PS。我是 Java 的新手,所以我不知道一些建议是什么意思,所以我非常感谢那些没有插件和东西的纯 Java 的建议(我不确定这是否是某些人的建议)。我希望要求不要太多(如果可能的话)。
【问题讨论】:
-
到目前为止你有没有尝试过?请分享你的努力。
-
二维数组是执行此操作的一种方式,但您也可以使用一维数组来执行此操作。
-
如果人们有一些相关的代码要处理,他们会更容易帮助您 - 请向我们展示您迄今为止所做的尝试
-
你正在苦苦挣扎的部分是什么?
-
我正在努力将 .csv 文件读取到二维数组,并逐列读取所述数组(同时忽略不相关的内容,如列名或行名)