2016-09-08 2 views
1

Ich lerne Uni Student, also brauche ich Ihre Hilfe, um diese Probleme zu lösen. Ich habe folgende Daten in student.txt Dateimischung von UG_Student und GradStudent.Lesen (;) getrennt Wert von Textdatei, die Mischung von Daten enthält drucken mit Java

Jane Jones;111999;11 First St, Unitown,2999;0401 444 444;4483;4;6;7 
Peter Smith;111998;22 Second St, West,5999;999 777;B Sc;2000;4672;5;5;5 
Jim Smith;111988;25 Third St, South,6001;0412 222 333;BESE;1998;4672;4;5;5 
John William;334344;123 Fig St, Townville,5655;0404 333 333;4333;5;6;5 

erste und letzte Zeile ein Datum in dieser Reihenfolge haben und bezeichnet UG_Student:

Name;StudentID;Address; ContactNo;SubjectNo;Test1;Test2;Test3 

zweite und dritte Zeile hat ein Daten in dieser Reihenfolge und zeigt GradStudent:

Name;StudentID;Address; ContactNo;PreviousDegree;GradYr;SubjectNo;Test1;Test2;Test3 

I habe folgenden Code, der nur auf JTextarea lesen und drucken kann, wenn die txt-Datei entweder UG_Student oder GradStudent enthält.

public void openFile() 
    { 
     try 
     { 
      input = new Scanner(new File("student.txt")); 
      input.useDelimiter(";"); 
     } 
     catch (FileNotFoundException fileNotFoundException) 
     { 
      System.err.println("Error opening file."); 
      System.exit(1); 
     } 
    } 

    public String readFile() 
    { 
     Student ugStudent = new UGstudents(); 
     Student gradStudent = new Gradstudents(); 

     //int lineNumber = 1; 

     //System.out.printf("running..."); 

     try 
     { 
      while (input.hasNext()) 
      {  
       String name = ugStudent.name = input.next(); 
       int studentID = ugStudent.studentID = input.nextInt(); 
       String address = ugStudent.address = input.next(); 
       int contactNo = ugStudent.contactNo = input.nextInt(); 
       int subjectNo = ugStudent.subjectNo = input.nextInt() ; 
       int test1 = ugStudent.test1 = input.nextInt(); 
       int test2= ugStudent.test2 = input.nextInt(); 
       int test3= ugStudent.test3 = input.nextInt(); 
       String checkGrade= ugStudent.checkGrade(); 

       //System.out.println(name + studentID + address + contactNo + subjectNo + test1 + test2 + test3 + checkGrade); 
       resultColumn = ("Name\t Student Id\t Address\t\t Contact No\t Subject No\t Test 1\t Test 2\t Test 3\t Grade\n--------------------------------------------------------------------------------------------------------------------\n"); 
       result+=(name+ "\t" + studentID + "\t " + address + "\t " + contactNo + "\t " + subjectNo + " \t" + test1 + "\t " + test2 + "\t " + test3 + "\t " + checkGrade); 

      }    
     } 
     catch (NoSuchElementException elementException) 
     { 
      System.err.println("File improperly formed."); 
      input.close(); 
      System.exit(1); 
     } 
     catch (IllegalStateException stateException) 
     { 
      System.err.println("Error reading from file."); 
      System.exit(1); 
     } 
     return resultColumn +result; 
    } 

    public void closeFile() 

    { 

     if (input != null) 

     input.close(); 

    } 
} 

Die angegebene Textdatei sollte jedoch eine Mischung aus Daten enthalten, wie oben gezeigt. Meine Frage ist, wie man nur UG_Student oder GradStudent Daten von dieser Textdatei liest und druckt? Sorry über lange Frage, aber das ist das Beste, was ich könnte.

+0

http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java – svarog

+0

Seien Sie vorsichtig bei der Auswahl der Tags. Auch wenn die App. hat eine GUI, der Code-Snippet schlägt vor, dass das eigentliche Problem * nichts * mit Swing zu tun hat. –

+0

Vielen Dank für Ihre Korrektur. –

Antwort

0

Es scheint mir die beste Möglichkeit, reguläre Ausdrücke zu verwenden. Sie können Ausdrücke für jeden Linientyp verwenden und versuchen, die einzelnen Zeilen abzugleichen, wobei die nicht zutreffenden Zeilen übersprungen werden. Zum Beispiel:

Pattern undergrad = Pattern.compile("(\\w*) (\\w*);(\\d*); ..."); 
Matcher matcher = undergrad.match(line); 
if (matcher.matches()) { 
    String firstName = matcher.group(1); 
    String secondName = Matcher.group(2); 
    String studentNumber = Matcher.group(3); 
    ... 
} 

Der Vorteil von regulären Ausdrücken ist, dass Sie die Zeile passen und die Werte zu identifizieren in einem einzigen Befehl zu extrahieren. Weitere Informationen zu ihrer Verwendung finden Sie unter Pattern.

+0

Danke für schnelle Antwort. Ich werde es versuchen. –

Verwandte Themen