java csv文件打开和编辑

时间:2018-08-29 12:32:21

标签: java csv

我在辅导班上为一些学生打了些分数...而且我正尝试学习如何打开和编辑csv文件,因为它们与Java中的普通.txt文件不同,所以我认为这是绝佳的机会。

我有一个采用以下格式的Students.csv文件:

132567  Amelia
123476  Charlie
123516  Emily
143456  George
123466  Harry
123457  Jack
125456  Joshua
132456  Lily
123456  Oliver
123459  Sophie
123486  Thomas
123518  William

数字是他们的学生编号,然后是学生姓名。

在一个单独的.csv文件中,我用以下格式在其学生编号旁边标记了模块的标记:

123456  51.2    57.3    68.2    72.1
123457  60.4    51.3    70       55
123459  45      60.1    62.7    43.2
123466  37.9    44      67.2    48.5
123476  52.7    78.2    73.3    69.8
123486  45.9    61.2    55.4    41.7
123516  61.2    66.4    72.3    57.8
123518  83.2    78.2    66.1    61.7
125456  69.8    60.3    72.1    64
132456  73.1    82.6    71.2    79.5
132567  56.3    48.8    45.7    61.2
143456  41.9    66.2    55.4    63.2

对于这四个模块中的每个模块,我想创建一个新文件,其中包含所有学生的结果。这些模块报告文件的名称可以是任何名称,例如IR101.txt,...,IR104.txt。因为以后我也可以更改它们。

我希望最终结果是这样的:

Module: IR102
Mean: 62.88
00 -  39.9: 0
40 -  49.9: 2
50 -  59.9: 2
60 -  69.9: 5
70 - 100.0: 3
123466, Harry: 44.0
132567, Amelia: 48.8
123457, Jack: 51.3
123456, Oliver: 57.3
123459, Sophie: 60.1
125456, Joshua: 60.3
123486, Thomas: 61.2
143456, George: 66.2
123516, Emily: 66.4
123476, Charlie: 78.2
123518, William: 78.2
132456, Lily: 82.6

不要担心进行均值计算,因为我可以自己实现。

到目前为止,这是我所拥有的,并且所有这些操作都是打开并打印students.csv文件,但是我仍然无法弄清楚如何访问每个值并对其进行操作,因为它与python非常不同

public class excelfile {

    public static final String students_file = "students.csv";
    public static final String marks_file = "marks.csv";

    public static String[] students() {
        Scanner input = null;
        try {
            input = new Scanner(new File(students_file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        String[] tmp = new String[14];
        int c = 0;
        while (input.hasNextLine()) {
            tmp[c++] = input.nextLine();
        }
        input.close();

        System.out.println(Arrays.deepToString(tmp));

        return tmp;

    }

    public static void main(String[] args) {
    students();

    }
}

1 个答案:

答案 0 :(得分:0)

使用正则表达式为您指出(基本/原始)方式:

String test = "123 John Maths 15.5";
Matcher matcher = Pattern.compile("(\\d+) (\\w+) (\\w+) (\\d+|\\d+\\.\\d+)").matcher(test);
if(matcher.matches()) {
    System.out.println("ID = " + matcher.group(1));
    System.out.println("Name = " + matcher.group(2));
    System.out.println("Subject = " + matcher.group(3));
    System.out.println("Mark = " + matcher.group(4));
}

唯一可行的条件是CSV文件始终具有相同的格式。 其余的取决于您,因为很容易解析所有文件,只需将文件中的每一行与第二个文件中的一行匹配即可。 最简单的方法(不使用类等)是使用简单的Array或Map(例如,键将是学生的ID,这样您就可以轻松地搜索他)。