2016-02-08 6 views
0

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

3333 (и т. Д.) Являются идентификационным номером ученика, а три числа после него являются его результатами. 0,3 вес для первых двух тестов, 0,4 вес для третьего. Нуль - это просто разделение классов.

У меня есть буферный считыватель для ввода всех данных, но я не уверен, что делать дальше. преобразовать в массив символов? или я сохраняю каждый # как int и использую математические функции.

Все, что у меня есть, это прямо сейчас, чтобы прочитать файл.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
public class Jose_courseData { 
public static void main(String[]args) { 
    try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Jose\\Documents\\Loops\\courseData.txt"))) 
    { 

     String sCurrentLine; 

     while ((sCurrentLine = br.readLine()) != null) { 
      System.out.println(sCurrentLine); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

текстовый файл выглядит следующим образом

0.30 0.30 0.40 
    161 
    3333 70 60 50 
    4444 50 50 50 
    5555 80 90 80 
    0 
    162 
    1212 90 85 92 
    6666 60 80 90 
    7777 90 90 90 
    8888 95 87 93 
    9999 75 77 73 
    0 
    263 
    2222 90 65 75 
    8989 60 40 60 
    9090 70 80 30 
    0 

мне нужно взять текст, организовать его, и усреднить результаты. вот что это должно выглядеть

Grade Data For Class 161 
ID Programs Midterm Final Weighted Average Programs grade 
-- -------- ------- ----- ---------------- -------------- 
3333 70 60 50 59.00 Pass 
4444 50 50 50 50.00 Fail 
5555 80 90 80 83.00 Pass 
Class Average: 64.00 

Grade Data For Class 162 
ID Programs Midterm Final Weighted Average Programs grade 
-- -------- ------- ----- ---------------- -------------- 
1212 90 85 92 ... Pass 
6666 60 80 90 ... Fail 
7777 90 90 90 ... Pass 
8888 95 87 93 ... Pass 
9999 75 77 73 ... Pass 
Class Average: ... 

Grade Data For Class 263 
ID Programs Midterm Final Weighted Average Programs grade 
-- -------- ------- ----- ---------------- -------------- 
2222 . . . 
8989 . . . 
9090 . . . 
Class Average: ... 

ответ

0

Вы можете использовать java.nio, чтобы получить содержимое файла в виде списка строк, так что вы можете отфильтровать строки с 1 по 1. Класс списка имеет ToArray (T [ ] а) метод, который можно использовать для преобразования его в строковый массив. Затем вы можете фильтровать по линиям, чтобы определить, какой из них вы будете использовать, и как его распечатать. Например:

package Testers; 

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.List; 

public class TestClassResults{ 

    public static int testone = 30; //Percentages. Marked as integers. These can also be changed 
    public static int testtwo = 30; 
    public static int testthree = 40; 
    public static List<Float> average; 
    public static int students; 

    public static String[] getAsArray(List<String>ls){ 
     return ls.toArray(new String[]{}); 
    } 

    public static void main(String[] args){ 
    File file = new File("C:\\Users\\Jose\\Documents\\Loops\\courseData.txt"); 
    Path path = Paths.get(file.toURI()); 
    try { 
     List<String> ls = Files.readAllLines(path); 
     String[] array = getAsArray(ls); 
     parseClassRecord(array[1]); 
     parseStudentRecord(array[2]); 
     parseStudentRecord(array[3]); 
     parseClassAverage(); 
     //You can keep parsing class and student records to match whatever you need to do 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
    public static void parseClassRecord(String classno){ 
     System.out.println("Grade Data for Class " + classno); 
     System.out.println("ID Programs Midterm Final Weighted Average Programs grade"); 
     System.out.println("-- -------- ------- ----- ---------------- --------------"); 
    } 

    public static void parseStudentRecord(String studentfacts){ 
     System.out.print(studentfacts + " "); 
     String first = studentfacts.substring(6, 7); 
     String second = studentfacts.substring(9, 10); 
     String third = studentfacts.substring(12, 13); 
     int one = Integer.parseInt(first); 
     int two = Integer.parseInt(second); 
     int three = Integer.parseInt(third); 
     float a = one/testone; 
     float b = two/testtwo; 
     float c = three/testthree; 
     float percent = (a + b + c) /3; 
     System.out.print(percent + " "); 
     if(percent > 0.5){ //If the student scored more than 50% in a test 
      System.out.print("Pass"); 
     }else{ // If they didn't 
      System.out.print("Fail"); 
     } 
     System.out.println(); 
     average.add(Float.valueOf(percent)); 
     students = students + 1; // Also can use students++ (it does the same thing). 
    } 

    public static void parseClassAverage(){ 
     float total = 0; 
     for(int i = 0; i < average.size(); i++){ 
      total = total + average.get(i); 
     } 
     float avg = total/students; 
     System.out.println("Class Average: " + avg); 
     System.out.println(); // Creates a space between the lines. 
    } 

} 

Мой метод, вы заметите, не использует BufferedReader, потому что я считаю, что это просто для чтения одну строку, но для файла нескольких линий, я считаю, это проще используйте их как список, поскольку API-интерфейс List и Collection имеет специальные методы.

 Смежные вопросы

  • Нет связанных вопросов^_^