【问题标题】:Reading from a .csv file with java使用 java 从 .csv 文件中读取
【发布时间】:2014-11-24 20:15:46
【问题描述】:

美好的一天, 我有一个 .csv 文件,其中包含如下所示的数据,我希望能够搜索该文件。文件分为Regno、ModuleCode和exam Mark。提供 Regno 和 ModuleCode 时如何搜索文件。这个文件是唯一的,因为没有唯一的列。请帮忙。

Regno,ModuleCode,ExamMark
1334599, CE152-4-SP, 54.5
1332141, CE153-4-AU, 43.8
1398559, CE162-4-SP, 55.3
1334667, CE141-4-AU, 51.3
1335181, CE162-4-SP, 62.5
1332141, CE154-4-SP, 63.1
1335167, CE154-4-SP, 43.0
1365678, CE155-4-SP, 28.9
1334863, CE155-4-SP, 39.7
1334703, CE101-4-SP, 56.8
1335167, CE161-4-AU, 46.9
1365678, CE153-4-AU, 15.6
1334718, CE141-4-AU, 61.7
1394001, CE151-4-AU, 41.4
1334768, CE163-4-AU, 42.7
1334863, CE152-4-SP, 46.3
1334592, CE155-4-SP, 52.7
1383431, CE161-4-AU, 49.8
1398559, CE151-4-AU, 54.7
1334599, CE155-4-SP, 77.6
1334768, CE101-4-SP, 60.4
1334599, CE153-4-AU, 71.7
1383260, CE153-4-AU, 70.3
1334718, CE153-4-AU, 58.6
1334863, CE153-4-AU, 29.5
1334718, CE152-4-SP, 73.7
1394001, CE101-4-SP, 24.0
1383260, CE152-4-SP, 55.3
1374567, CE142-4-AU, 72.1
1383260, CE151-4-AU, 67.2
1394001, CE161-4-AU, 72.7
1398559, CE161-4-AU, 68.6
1332141, CE151-4-AU, 65.5
1383260, CE101-4-SP, 64.4
1334703, CE162-4-SP, 96.4
1398559, CE142-4-AU, 48.5
1334768, CE155-4-SP, 37.3
1332568, CE155-4-SP, 66.9
1334718, CE154-4-SP, 56.8
1364569, CE141-4-AU, 62.4
1334568, CE162-4-SP, 38.3
1334599, CE161-4-AU, 86.5
1334667, CE155-4-SP, 31.7
1334592, CE141-4-AU, 56.2
1334592, CE152-4-SP, 95.8
1334568, CE161-4-AU, 25.7
1383431, CE151-4-AU, 66.2
1394001, CE155-4-SP, 44.7
1332141, CE161-4-AU, 57.8
1332568, CE153-4-AU, 62.0
1334568, CE164-4-SP, 37.1
1334718, CE161-4-AU, 86.0
1354564, CE155-4-SP, 51.3
1364569, CE154-4-SP, 29.8
1334768, CE151-4-AU, 22.3
1383431, CE141-4-AU, 59.0
1398559, CE163-4-AU, 56.5
1365678, CE142-4-AU, 43.2
1374567, CE155-4-SP, 48.5
1394001, CE153-4-AU, 58.2
1374567, CE162-4-SP, 47.2
1354564, CE162-4-SP, 45.6
1334863, CE141-4-AU, 43.5
1334667, CE151-4-AU, 44.3
1394001, CE154-4-SP, 55.0
1334768, CE164-4-SP, 28.6
1334568, CE163-4-AU, 32.2
1394001, CE141-4-AU, 56.6
1334592, CE154-4-SP, 49.9
1335181, CE151-4-AU, 78.1
1365678, CE161-4-AU, 60.0
1374567, CE152-4-SP, 59.4
1334599, CE151-4-AU, 68.8
1334768, CE161-4-AU, 49.8
1398559, CE164-4-SP, 63.4
1334863, CE154-4-SP, 20.7
1364569, CE101-4-SP, 52.1
1334703, CE142-4-AU, 70.5
1383260, CE154-4-SP, 61.6
1334718, CE101-4-SP, 57.6
1334568, CE142-4-AU, 60.6
1335167, CE141-4-AU, 52.5
1334599, CE101-4-SP, 85.3
1374567, CE151-4-AU, 60.8
1334568, CE101-4-SP, 34.5
1334592, CE161-4-AU, 73.1
1332141, CE152-4-SP, 62.5
1365678, CE151-4-AU, 44.8
1335167, CE152-4-SP, 64.5
1398559, CE101-4-SP, 60.5
1383431, CE152-4-SP, 63.4
1383260, CE141-4-AU, 78.5
1374567, CE101-4-SP, 58.7
1332568, CE101-4-SP, 59.7
1365678, CE101-4-SP, 40.5
1334703, CE155-4-SP, 70.2
1335167, CE101-4-SP, 56.1
1334599, CE154-4-SP, 87.0
1334718, CE151-4-AU, 62.9
1332568, CE152-4-SP, 55.6
1354564, CE161-4-AU, 45.9
1335167, CE155-4-SP, 30.2
1334667, CE153-4-AU, 40.8
1354564, CE163-4-AU, 37.6
1398559, CE155-4-SP, 41.3
1334568, CE151-4-AU, 42.2
1334592, CE101-4-SP, 71.6
1374567, CE153-4-AU, 77.8
1335181, CE155-4-SP, 66.5
1354564, CE151-4-AU, 37.3
1334667, CE101-4-SP, 31.0
1383431, CE153-4-AU, 48.2
1354564, CE142-4-AU, 34.1
1334599, CE141-4-AU, 67.1
1383431, CE101-4-SP, 69.7
1335167, CE153-4-AU, 40.3
1364569, CE161-4-AU, 60.3
1383431, CE154-4-SP, 93.3
1365678, CE152-4-SP, 43.5
1334703, CE151-4-AU, 69.5
1383260, CE155-4-SP, 40.0
1332141, CE141-4-AU, 68.1
1334718, CE155-4-SP, 52.2
1335181, CE163-4-AU, 65.2
1364569, CE155-4-SP, 36.0
1332568, CE154-4-SP, 66.0
1334768, CE162-4-SP, 51.7
1364569, CE151-4-AU, 46.9
1334863, CE151-4-AU, 37.9
1334568, CE155-4-SP, 53.8
1335167, CE151-4-AU, 46.1
1332568, CE151-4-AU, 71.3
1354564, CE101-4-SP, 50.9
1334863, CE161-4-AU, 25.2
1334703, CE164-4-SP, 45.7
1334703, CE163-4-AU, 55.0
1335181, CE142-4-AU, 70.4
1335181, CE101-4-SP, 70.7
1334667, CE154-4-SP, 61.3
1334703, CE161-4-AU, 45.3
1332568, CE141-4-AU, 62.2
1374567, CE161-4-AU, 70.4
1365678, CE162-4-SP, 69.3
1334768, CE142-4-AU, 52.6
1394001, CE152-4-SP, 18.9
1335181, CE164-4-SP, 74.4
1354564, CE164-4-SP, 48.0
1332568, CE161-4-AU, 77.2
1383431, CE155-4-SP, 58.2
1334592, CE151-4-AU, 69.6
1335181, CE161-4-AU, 62.9
1334667, CE161-4-AU, 67.0
1332141, CE101-4-SP, 95.5
1364569, CE153-4-AU, 54.5
1383260, CE161-4-AU, 71.9

代码:

private void displayCourseModules() throws IOException{
    File f=  openFile("enrolment.csv");
    BufferedReader fr = null;
    fr = Buffered(fr, f);

    // fr.i
    byte len =8;

    while(len==8)
    {
        String h = null;

        try
        {
            h =  fr.readLine();
        } 
        catch (IOException ex) 
        {
            System.out.println(ex);
        }

        byte length_2= 1;

        try
        {
            String hr[] = h.split(",");

            hr[0] =  hr[0].concat(",");
            hr[1] =  hr[1].concat(",");
            hr[2] =  hr[2].concat(",");
            hr[3] =  hr[3].concat(",");
            hr[4] =  hr[4].concat(",");
            hr[5] =  hr[5].concat(",");
            hr[6] =  hr[6].concat(",");
            hr[7] =  hr[7].concat(",");
            hr[8] =  hr[8].concat(",");

            enrollmentcolumn0.append(hr[0]);
            enrollmentcolumn1.append(hr[1]);
            enrollmentcolumn2.append(hr[2]);       
            enrollmentcolumn3.append(hr[3]);
            enrollmentcolumn4.append(hr[4]);
            enrollmentcolumn5.append(hr[5]);
            enrollmentcolumn6.append(hr[6]);       
            enrollmentcolumn7.append(hr[7]);
            enrollmentcolumn8.append(hr[8]);


        }
        catch(NullPointerException ew)
        {
            len=0;
        }

    }

    String enrollmentColumns[] = new String[9];

    enrollmentColumns[0]= enrollmentcolumn0.toString();
    enrollmentColumns[1]= enrollmentcolumn1.toString();
    enrollmentColumns[2]= enrollmentcolumn2.toString();       
    enrollmentColumns[3]= enrollmentcolumn3.toString(); 
    enrollmentColumns[4]= enrollmentcolumn4.toString();
    enrollmentColumns[5]= enrollmentcolumn5.toString();
    enrollmentColumns[6]= enrollmentcolumn6.toString();       
    enrollmentColumns[7]= enrollmentcolumn7.toString(); 
    enrollmentColumns[8]= enrollmentcolumn8.toString(); 

    String enrollmentColumnArray0[]= enrollmentColumns[0].split(",");
    String enrollmentColumnArray1[]= enrollmentColumns[1].split(",");
    String enrollmentColumnArray2[]= enrollmentColumns[2].split(",");
    String enrollmentColumnArray3[]= enrollmentColumns[3].split(",");
    String enrollmentColumnArray4[]=enrollmentColumns[4].split(",");
    String enrollmentColumnArray5[]= enrollmentColumns[5].split(",");
    String enrollmentColumnArray6[]= enrollmentColumns[6].split(",");
    String enrollmentColumnArray7[]= enrollmentColumns[7].split(",");
    String enrollmentColumnArray8[]= enrollmentColumns[8].split(",");
    // System.out.printf(enrollmentColumnArray8[0]+"hi");

    double yearmark1[]= new double[9];
    byte se = 0;

    for(int a=0;a<=enrollmentColumnArray8.length;a++)
    {

        try
        {

            if( enrollmentColumnArray0[a].equals(registrationNumber))
            {
                counter=1;
                System.out.println("________________________________________");
                System.out.println("List of  Modules");

                System.out.println("Module Code\t\tModule Name\t\t\t\t\t\tCourseWorkMark\tExamMarks"); 

                System.out.println(enrollmentColumnArray1[a]+"\t\t"+getModuleName(enrollmentColumnArray1[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray1[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray1[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray1[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray1[a])));
                //yearmark1[0] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray1[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray1[a])));
                // if(yearmark1[0]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray2[a]+"\t\t"+getModuleName(enrollmentColumnArray2[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray2[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray2[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray2[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray2[a])));
                // yearmark1[1] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray2[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray2[a])));
                // if(yearmark1[1]>=40)
                // {
                se++;
                //  }

                System.out.println(enrollmentColumnArray3[a]+"\t\t"+getModuleName(enrollmentColumnArray3[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray3[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray3[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray3[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray3[a])));
                // yearmark1[2] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray3[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray3[a])));
                // if(yearmark1[2]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray4[a]+"\t\t"+getModuleName(enrollmentColumnArray4[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray4[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray4[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray4[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray4[a])));
                // yearmark1[3] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray4[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray4[a])));
                //  if(yearmark1[3]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray5[a]+"\t\t"+getModuleName(enrollmentColumnArray5[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray5[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray5[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray5[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray5[a])));
                // yearmark1[4] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray5[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray5[a])));
                // if(yearmark1[4]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray6[a]+"\t\t"+getModuleName(enrollmentColumnArray6[a])+"\t\t\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray6[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray6[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray6[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray6[a])));
                //  yearmark1[5]=Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray6[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray6[a])));
                // if(yearmark1[5]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray7[a]+"\t\t"+getModuleName(enrollmentColumnArray7[a])+"\t\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray7[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray7[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray7[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray7[a])));
                //  yearmark1[6] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray7[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray7[a])));
                // if(yearmark1[6]>=40)
                // {
                se++;
                // }

                System.out.println(enrollmentColumnArray8[a]+"\t\t"+getModuleName(enrollmentColumnArray8[a])+"\t\t\t\t"+ getCourseWorkMark(registrationNumber,enrollmentColumnArray8[a])+"\t\t"+getExamMark(registrationNumber,enrollmentColumnArray8[a])+"\t\t"+moduleMark(getExamMark(registrationNumber,enrollmentColumnArray8[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray8[a])));
                //  yearmark1[7] =Double.parseDouble(moduleMark(getExamMark(registrationNumber,enrollmentColumnArray8[a]), getCourseWorkMark(registrationNumber,enrollmentColumnArray8[a])));
                // if(yearmark1[7]>=40)
                // {
                se++;
                // }



            }
        }
        catch(Exception e)
        {
            // System.out.println(e);
        }
    }

    yearmark1[8]= java.lang.Math.round((yearmark1[0]+yearmark1[1]+yearmark1[2]+yearmark1[3]+yearmark1[4]+yearmark1[5]+yearmark1[6]+yearmark1[7])/8);
    System.out.println("YearMark: "+yearmark1[8]); 
    System.out.println("No of Modules Which the student has achieved a pass mark of 40% or more. : "+se);
}

private String getExamMark(String studentRegistrationNo1,String moduleCode1) throws IOException
{
    File f=  openFile("examMarks.csv");
    BufferedReader fr = null;
    fr = Buffered(fr,f);
    int  he;
    // byte len =1;
    String line = null;
    int len=63;
    while (len==63)
    {
        // line = fr.readLine();
        // CharBuffer e = null;

        try {
            // info = in.readLine();
            h = fr.readLine();

            // sb.append(h);
        }
        catch (IOException ex) {
            System.out.println(ex);
        }

        byte length_2= 1;

        // r[i]=h;
        try{
            r= h.split(",");

            // System.out.println(r.length);

            // r[0] =  r[0].concat(",");
            // r[1] =  r[1].concat(",");
            //r[2] =  r[2].concat(",");
            examMark= r[0];
            // System.out.println(r[0]);

            sb.append(r[0]);
            sb.append(",");
            rb.append(r[1]);
            rb.append(",");
            fb.append(r[2]);
            fb.append(",");
            // System.out.println(r[0]);

            // System.out.println(a[0]);
            // r[0]= r[0].concat(",");
        }
        catch(NullPointerException e){
            len=0;
        }

    }

    // System.out.println(r.length);
    examRegno = sb.toString();
    examModulecode = rb.toString();
    examMark = fb.toString();
    // System.out.println(examRegno);

    // System.out.println(examRegno );
    String examRegnoArray[]= examRegno.split(",");
    //System.out.println(examRegnoArray.length);
    String examModulecodeArray[]= examModulecode.split(",");

    // System.out.println( examModulecodeArray[5]);
    String examMarkArray[]= examMark.split(",");
    // System.out.println(examRegnoArray.length);
    // System.out.println(examMarkArray[154]);
    try
    {
        for(int i=0;i<=examMarkArray.length;++i)   

        if((examRegnoArray[i+9].equals(studentRegistrationNo1) && examModulecodeArray[i+9].equals(moduleCode1))){
            return  ((examMarkArray[i+1]));
        }

        // return  examRegnoArray.length+"";

    }
    catch(Exception e)
    {
        // System.out.println(e);
        // JOptionPane.showMessageDialog(null,e);
    }

    // System.out.println("hi");
    // System.out.println(examModulecode);
    // System.out.println(examMark);
    return null;
}

【问题讨论】:

  • 您可以遍历文件的每一行测试当前行中的值是否等于您要查找的值...
  • 您可以发布一些代码,例如您尝试过的代码吗?
  • 为什么不先用现有的库解析文件并迭代生成的对象?
  • for(int i=0;i
  • 你的家庭作业问题应该显示你到目前为止所做的尝试。显示您遇到的代码。我怀疑您可能不会使用外部库,因为那样我会使用 Apache Commons CSV 1.1。然而,您的结构是一个非常简单的 readline/split/if-equals 循环。

标签: java


【解决方案1】:

您提出的问题表明了许多数据库构建问题中实际出现的一个重要细节。

没有唯一的列。

对您提供的列表的检查证实,事实上,第 1 列和第 2 列都不能单独用作键。

但是,仅仅因为没有唯一的列,并不意味着你没有任何可能的键。这两个非唯一的列可以作为一个键一起使用,作为一个compound key,这似乎可以通过您提供的列表来实现。

换句话说,当您同时拥有RegNo 和ModuleCode 时,它们会映射到一个唯一值。

例如,键 1334599 CE152-4-SP 将唯一映射到 54.5。

有一个集合允许您处理您应该能够用来实现此功能的键及其值。

【讨论】:

【解决方案2】:

这应该可以满足您的需求:

public static void main(String[] args) {
    String regno = "", moduleCode = "", examMark = "";
    String row;
    try {
        Scanner csvFile = new Scanner(new File("test.csv"));
        csvFile.nextLine(); // skip first line
        while (csvFile.hasNextLine()) {
            row = csvFile.nextLine();
            String[] fields = row.split(", ");
            regno = fields[0];
            moduleCode = fields[1];
            examMark = fields[2];

            if (regno.equals("1334599") && moduleCode.equals("CE152-4-SP")) {
                System.out.println(examMark);
            }
        }
    } catch (FileNotFoundException ex) {
        System.out.println(ex);
    }
}

如果您希望用户能够提供“Regno”和“ModuleCode”值,那么您可以从用户那里获取这两个值的输入,并在 if 语句中提供它们。

【讨论】:

  • 它只是说构建成功
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 2022-11-12
  • 2019-05-03
  • 2017-11-10
  • 2012-10-17
  • 2013-11-24
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多