2017-02-03 4 views
1

Ich habe eine Datendatei mit den Einträgen (5 Zahlen pro Zeile.Numerische Datendatei schreibt Art Ausgabe

8,1,3,7,9 
2,4,7,10,11 
9,99,4,7,3 
5,1,2,3,17 

Die komplette Datendatei extrem groß ist, aber ähnliche Daten im gesamten
Ich versuche zu lesen die Daten Zeile für Zeile aus der Eingabedatei, sortieren die Zahlen auf dieser Linie,
dann die sortierten Zahlen auf eine neue Ausgabedatei schreiben.

Anstatt die gesamte Eingabedatei in einem Array oder einem Speicher zu speichern, ich möchte um nur die Nummern für jede Zeile zu speichern, Zeile für Zeile, sortiere sie und schreibe diese sortierten Zahlen in die nächste Zeile der Ausgabedatei. Ich habe eine erste Möglichkeit gefunden, den kleineren Datensatz in eine andere Datei zu schreiben und zu schreiben, aber er schreibt das Array, das in geschweiften Klammern wie [ 1, 3, 7, 8, 9] anstelle von 1, 3, 7, 8, 9 erscheint. Wenn ich herausfinde, was der richtige, effizientere Weg ist, habe ich auch geplant, eine separate Klasse nur für die Sortierung zu erstellen und würde eine Zeile nach der anderen aus der Datendatei lesen, sie an die separate Klasse weitergeben, die sie sortieren und sortieren würde schreibe es in die Ausgabedatei. Wie kann ich jede Zeile einzeln nacheinander in das Array eingeben, sortieren und in die neue Ausgabedatei schreiben?

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.util.Arrays; 

    public class Soup { 
    public static void main(String[] args) throws IOException { 
     File dir = new File("."); 

     String source = dir.getCanonicalPath() + File.separator + "Code.txt"; 
     String dest = dir.getCanonicalPath() + File.separator + "Dest.txt"; 

     File fin = new File(source); 
     FileInputStream fis = new FileInputStream(fin); 
     BufferedReader in = new BufferedReader(new InputStreamReader(fis)); 

     FileWriter fstream = new FileWriter(dest, true); 
     BufferedWriter out = new BufferedWriter(fstream); 

     String aLine = null; 
     while ((aLine = in.readLine()) != null) { 
      //Process each line and add output to Dest.txt file 
      //Arrays.sort(aLine); 

      String[] strings = aLine.split(","); 
      int[] numbers = new int[strings.length]; 

      for (int i=0; i < numbers.length; i++) 
      { 
       numbers[i] = Integer.parseInt(strings[i]); 


      } 
      Arrays.sort(numbers); 

      System.out.println(Arrays.toString(numbers)); 



      //for(int k=0; k < numbers.length; k++) 
       //out.writeObject(numbers[k]); 


      //out.write(aLine); 
      out.write(Arrays.toString(numbers)); 
      //out.write(numbers 
      //out.write((numbers)); 
      out.newLine(); 
     } 

     // do not forget to close the buffer reader 
     in.close(); 

     // close buffer writer 
     out.close(); 
+1

und was ist Ihre Frage? Das Erstellen einer eigenen Klasse zum Sortieren ändert die Effizienz nicht. Wenn Geschwindigkeit Ihnen am Herzen liegt und Sie immer fünf Zahlen kennen, können Sie das int [5] Array verwenden, anstatt es jedes Mal neu zu erstellen. –

Antwort

1

Ihre Arrays.toString (Nummern) fügt die Klammern hinzu. Gerade die Klammern mit einem leeren String ersetzen, bevor Sie sie in die Datei schreiben -

out.write(Arrays.toString(numbers).replaceAll("\[|\]", "")); 
0
out.write(Arrays.toString(numbers).replaceAll("\[|\]", "")); does not work, error: at java.lang.String.replaceAll(Unknown Source) 

Auch ich versuche, ein besseres Verfahren zur Bestimmung der Art der Durchführung und schreibe Aufgabe, um herauszufinden, ich bin sicher, mein Code nicht effizient und suche nach einem effizienteren Weg, um die Aufgabe zu erfüllen. Ich bin offen für Vorschläge.

+0

Sie sagen mir, dass Sie replaceAll nicht für eine Java-Zeichenfolge verwenden können? Ich kann es benutzen und es funktioniert gut. Welche Version von Java läufst du? Auch Ihre Sortiermethode ist so schnell wie möglich, die eingebaute Sortierung ist O (n * logn), was viel schnell genug ist. –

+0

out.write (Arrays.toString (Nummern) .replaceAll ("\ [| \]", "")); Ungültige Escape-Sequenz (gültige sind \ b \ t \ n \ f \ r "\ '\\) – Drewskie

+0

benutze meine aktuelle, die ich gepostet habe, deine eindeutig nicht die \ wie die, die ich gepostet habe. Du benutzt" [ |] "ich benutze" \\ [| \\] " –

Verwandte Themen