Прочитайте CSV и найдите скорость заполнения каждого столбца

#java #opencsv

#java #opencsv

Вопрос:

Я должен прочитать файл CSV и рассчитать скорость заполнения каждого столбца в файле CSV. Я читаю файл CSV, который выглядит следующим образом:

 Roll No, Name,  Department
1      , Person1,  CS
2      , Person2,  CS
3      , Person3,  CS
       , Person4,  CS
null   ,        ,  null
  

Теперь, как мы можем видеть, столбец Roll No не содержит данных после 3-й строки, поэтому его скорость заполнения будет равна 80%
а для имени столбца скорость заполнения будет составлять 90%, потому что в 5-й строке нет данных и так далее для остальных столбцов в файле CSV.

Я хочу, чтобы результат был чем-то вроде:

 {
  "fillRate": [
    {
      "columnName": "Roll No",
      "fillRate": "80%"
    },
    {
      "columnName": "Name",
      "fillRate": "90%"
    },
    {
      "columnName": "Department",
      "fillRate": "90%"
    }
  ]
}
  

Ниже приведен мой код на данный момент:

 readFile(String fileName){
        String fullPath= fileDir   "/"   fileName;
        int totalNumOfRows=0;
        int totalNumOfRowsExcludeHeader=0;
        String[] headers = null;
        String[] columnsValue;
        Map<String,Integer> headerAndValidRecord = new LinkedHashMap<String,Integer>();
        Map<String,Integer> headerAndPercentageOfValidRecord = new LinkedHashMap<String,Integer>();
        List<Map<String,String>> responeList= new ArrayList<Map<String,String>>();
        try{
            InputStream in = sftpConnection.get(fullPath);// getting File from server
            BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));


            String line = null;

            while ((line = br.readLine()) != null){

                totalNumOfRows  ;
                
                if(totalNumOfRows==1){
                    headers =line.split(",");
                    for(int h=0;h<headers.length;h  ){
                        headerAndValidRecord.put(headers[h], 0);
                    }
                }
                

                
                else{
                    columnsValue =line.split(",");

                    for(int cV=0;cV<columnsValue.length;cV  ){

                        if((columnsValue[cV]!=null) amp;amp; (!((columnsValue[cV].trim()).isEmpty()))){
                            int countOfValidRecord=0;
                            countOfValidRecord=headerAndValidRecord.get(headers[cV]);
                            countOfValidRecord=countOfValidRecord 1;
                            headerAndValidRecord.put(headers[cV], countOfValidRecord);
                        }
                    }//--For loop close.
                }
                
            } 
            totalNumOfRowsExcludeHeader=totalNumOfRows-1;
            );
            headerAndPercentageOfValidRecord=calculatePercentage(headerAndValidRecord,totalNumOfRowsExcludeHeader); 
            
            
            
            
        }catch(Exception e){
            e.printStackTrace();
        }
        return responeList;
     }
  

Комментарии:

1. Дорогой @GhostChat большое спасибо за вашу помощь. 🙂

2. Я ценю, что вы вернулись и улучшили свой ввод!

3. Чего все еще не хватает: пожалуйста, объясните, что, по вашему мнению, делает ваш текущий код, и где фактические результаты отличаются от ваших ожиданий. Также обратите внимание: вы должны разделять проблемы. На самом деле не имеет значения, что вы хотите создать запись JSON после вычисления этих чисел. Сосредоточьтесь на одной проблеме в данный момент. Ваша 1-я проблема: чтение данных CSV и вычисление правильных процентов. Когда это сработает, вы можете делать с этим все, что захотите. Итак, как сказано: отбросьте части, которые не имеют значения для вашего вопроса, и вместо этого объясните, чего, по вашему мнению, не хватает, и почему / где вы застряли.

Ответ №1:

почему бы вам не попробовать (total_filled / total_column) * 100.

Комментарии:

1. Вероятно, потому, что OP до сих пор не думал об этом… поскольку их код не содержит попыток подсчета значений для каждого столбца …. и обратите внимание: ваш ввод был бы нормальным комментарием, но на самом деле это не является ответом. Вам пришлось бы объяснить, как вычислять эти значения, и так далее.