RegNumber,CE701-7-AU,CE702-7-AU,CE703-7-AU,CE705-7-AU,CE707-7-AU,CE708-7-SP,CE709-7-SP,CE711-7-SP,CE740-7-SP,CE783-7-AU,CE784-7-AU,CE801-7-AU,CE802-7-AU,CE803-7-SP,CE804-7-AU,CE806-7-AU
1234567,51.2,68.2,57.9,62.1,51.2,,77.9,68.2,,,,62.1,,,,
1234568,,51.3,67.2,55.9,,55.1,,,,52.1,62.8,70.9,61.2,,,
1234592,,,62.7,,68.2,,,65.9,60,,,57.1,,62.8,70.9,71.2
1234667,,,,48.5,58.2,,,58.1,51.2,,52.3,,,63.7,61.2,59.2
1234768,52.7,78.2,,,X,55.9,,62.9,,60,,,62.8,,,61.2
1234863,,,35.6,,47.2,,,56.3,50.1,,61.2,52.1,,61.6,44.9,
1235167,,,,57.8,,54.4,78.2,,60.2,,61.2,52.1,,64.5,74.9,
1235181,,78.2,,61.7,,,,59,,62.8,59.1,,,65.4,77.5,61.2
1254564,,,,64,79.3,,X,X,,,83.8,,62.8,,73.9,71.2
1324569,73.1,,,,,77.6,,70.2,82.6,,,90.2,,75.2,71,73.8
1325678,,,45.7,,52.2,,,55.9,60,61.2,,52.1,61.8,,69.9,
1434567,66.5,52.7,55.9,64.2,,62.8,53.9,,61.2,,,,,,,61.2
以上就是CSV 里面的内容, 第一行是 课程代码, 然后就是 每个同学各个课程的分数。 现在我只需要里面的成绩,进行一些运算,,求各位高人指点,如果只读出 里面的成绩 并且 赋值给对应的学生!

解决方案 »

  1.   

    按行读,逗号拆分。
    或者去网上找CSVUtil
      

  2.   

    public class CsvUtil {

    private final String NULLID = "nullId";
    private final String FENGEFU = ","; private String filename = null;
    private BufferedReader bufferedreader = null;
    private List<String> list = new ArrayList<String>();

    public CsvUtil() { } public CsvUtil(String filename) {
    try{
    this.filename = filename;
    bufferedreader = new BufferedReader(new FileReader(filename));
    String stemp;
    while ((stemp = bufferedreader.readLine()) != null) {
    list.add(stemp);
    }
    } catch(Exception e){
    e.printStackTrace();
    }
    } public List<String> getList() {
    return list;
    }

    /**
     * 获得指定列所有信息组成的字符串
     * @param index :列数
     * @return 所有满足条件的字段组成的字符串,字段间","分割
     */
    public String getCol(int index){
    StringBuffer sb = new StringBuffer();
    if (index>=0){
    for (int i=1;i<list.size();i++){
    String oneStr = list.get(i);
    String[] msg = oneStr.split(FENGEFU);
    if (msg.length>index){
    sb.append(msg[index]+FENGEFU);
    }
    }
    }
    return sb.toString();
    }

    /**
     * 取得指定列里满足 符合id不在yjid[]的记录
     * @param 指定列的值 index: yjid :需要去除的行的id
     * @return 所有满足条件的字段组成的字符串,字段间","分割
     */
    public String getCol(int index ,String[] yjid) {
    String reStr = "";
    StringBuffer sb = new StringBuffer();
    List<String> listTmp = new ArrayList<String>();
    if (index >= 0){
    for (int i=1;i<list.size();i++){ //一次取得csv中读到的行,跳过第一行 列名
    boolean flag = false;
    String oneLine = list.get(i);
    for (int j=0;j<yjid.length;j++){//取出每一个已记录id
    String oneId = yjid[j];
    if ("".equals(oneId)){
    oneId = NULLID;
    }
    if (-1 != oneLine.indexOf(oneId)){
    flag = true;
    }
    }
    if (!flag){
    listTmp.add(oneLine);
    }
    }

    for (int i=0;i<listTmp.size();i++){
    String str = listTmp.get(i);
    String[] strs = str.split(FENGEFU);
    if (strs.length>index){
    sb.append(strs[index]+FENGEFU);
    }
    }
    reStr = sb.toString();
    }
    return reStr;
    }

    /**
     * 取得满足指定条件的条数
     * @param index:行数;msg:需满足的条件
     * @return Map<String,Integer>保存的是 例如(key=审核卡,value=2的记录;key=手足口病...)
     */
    public Map<String, Integer> getRowBy(int index, String msg){
    Map<String, Integer> map = new HashMap<String, Integer>();
    int rows = 0;
    final int NOTFOUNT = -1;

    if (!list.toString().equals("[]")) { // 非空文件
    for(int i=0;i<list.size();i++){
    String str = list.get(i); // 取出一行
    String[] words = str.split(FENGEFU);// 分割成数组
    if (index < words.length){ // 防止取的列数大于文件的列数
    String keyWord = words[index];// 取得所需要比较的列
    int n = msg.indexOf(keyWord);
    if (NOTFOUNT != n){
    if (-1 != msg.indexOf(FENGEFU)){//应访病种的处理
    int getNum = 0;
    if(null != map.get(keyWord)){//当map中已存该病种,给map的value+1
    getNum = map.get(keyWord);
    }
    map.put(keyWord, getNum+1);
    } else{ //其它卡片数的处理
    rows+=1;
    map.put(keyWord, rows);
    }

    }
    }
    } else {
    // 空文件
    }
    return map;
    }

    /**
     * 关闭io流
     */
    public void CsvClose() {
    try {
    this.bufferedreader.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    /**
     * 得到csv文件的行数
     */ 
    public int getRowNum() {
    return list.size();
    }

    // 得到csv文件的列数
    public int getColNum() {
    if (!list.toString().equals("[]")) {
    if (list.get(0).toString().contains(",")) { // csv文件中,每列之间的是用','来分隔的
    return list.get(0).toString().split(",").length;
    } else if (list.get(0).toString().trim().length() != 0) {
    return 1;
    } else {
    return 0;
    }
    } else {
    return 0;
    }
    } // 取得指定行的值
    public String getRow(int index) {
    if (this.list.size() != 0)
    return (String) list.get(index);
    else
    return null;
    } // 取得指定行,指定列的值
    // public String getString(int row, int col) {
    // String temp = null;
    // int colnum = this.getColNum();
    // if (colnum > 1) {
    // temp = list.get(row).toString().split(",")[col];
    // } else if (colnum == 1) {
    // temp = list.get(row).toString();
    // } else {
    // temp = null;
    // }
    // return temp;
    // }
      

  3.   

    import java.awt.List;
    import java.util.ArrayList;import javax.swing.text.html.HTMLDocument.Iterator;public class Part1{
    public static void main(String[] argz)
    {
    CsvUtil s=new CsvUtil("s.csv");
    List L=s.getList();
    System.out.print(L);
    }

    }result:java.awt.List[list0,0,0,0x0,invalid,selected=null]
    这是对CsvUtil的test,为什么结果出不来,,请高人指点
      

  4.   

    试试把 import java.awt.List;改成 
    import java.util.List;