Fileinhalt sortieren

celloman

Erfahrenes Mitglied
Hall Leute habe ein kleines Problrm,

Würde gerne wissen wie ich den Dateiinhalt sortieren kann.

In der Datei sind Blöcke enthalten


z.B


Part (53)

1 2 3 4
3 3 4 5

Part (12)

1 2 3 4
3 3 4 5

Part (33)

1 2 3 4
3 3 4 5


Ich öffne die Datei schreibe es in ein string und nun möchte ich es nach Parts sortiert haben. zu erst Part12 dann Part 33 und anschließend Part 53 danach möchte ich den sortierten Text in eine andere Datei speichern.


Kann mir da jemand ein kleiner Tipp geben. weis nicht mehr weiter :rolleyes:


Code:
import java.io.*;
import java.text.*;
import java.util.*;

/**
 * 
 * @author mcelik
 */
public class lerne
{
  /**
   * 
   * @param args 
   */
  public static void main( String[] args )
  {

    Vector vec = new Vector();
    String s;

    // Lies Textzeilen aus der Datei in einen Vector:
    try {
      BufferedReader in = new BufferedReader(
                          new InputStreamReader(
                          new FileInputStream( "c:/test1.txt" ) ) );
      while( null != (s = in.readLine()) ) {
        vec.add( s );
      }
      in.close();
    } catch ( IOException e ) {
      System.out.println( "Fehler beim Lesen der Datei!" );
    }





    // Schreibe alle Elemente als Textzeilen in die Datei:
    try {
      BufferedWriter out = new BufferedWriter(
                           new OutputStreamWriter(
                           new FileOutputStream( "c://test_neu.txt" ) ) );
      for( int i=0; i<vec.size(); i++ ) {
        s = vec.get( i ).toString();
        System.out.println( s );
        out.write( s, 0, s.length() );
        out.newLine();
      }
      out.close();
    } catch ( IOException e ) {
      System.out.println( "Fehler beim schreiben der Datei!" );
    }
  }
}
 
Hallo,

das ist nicht böse gemeint, aber das mit dem "weiß nicht mehr weiter" find ich etwas übertrieben, da bis jetzt nicht mal ein Ansatz von einer Sortierung zu sehen ist. Das sieht aus als hättest du es nicht mal versucht.

Ein tipp wäre mal, dass du beim einlesen schaust, was überhaupt in der Zeile steht, die du einliest. Jedes mal wenn dann Part drin steht könntest du es in einen anderen Vector.

Beispiel:
Du liest ein. Dann steht Part(...) in dem String. Diesen String und alles was danach kommt schreibst du in einen Vector. Wenn du dann wieder Part(...) einliest, schreibst du das und alles was danach kommt in einen anderen Vector. Das dann so lange weiter, bis die Datei zu ende ist. Dann hast du alles in "Blöcken" und kannst machen was du willst.

MFG

zEriX
 
Du könntest es so machen

Code:
//Klassenvariable
private List<List> liste = new ArrayList<List>();


//in der Methode
List stringlist = new ArrayList<String>();
while( null != (s = in.readLine()) ) {
if(/*deine Bedingung*/){
liste.add(stringlist);
stringlist = new ArrayList<String>();
}
        stringlist.add( s );
}

MFG

zEriX
 
Ich würde eine Klasse PartData erstellen die Comparable erweitert und die den Namen eines Parts und dessen Inhalt bekommen kann.

Beim Auslesen der Datei erstellt man entsprechend Objekte der Klasse PartData und packt diese in eine Liste. Am Ende kann man die Liste über Collections.sort(...) sortieren und dann die Daten wieder auslesen und in eine Datei schreiben.
 
Hy

ich dachte ich kann die Datei einfach in dem String sortieren und danach in eine andere Datei wiedergeben.


MFG
 
Sicher kannst du das. So wie zeja das erklärt hat, ist es die bessere Lösung. So würde ich es eigentlich auch machen, aber ich dachte, ich bleib näher an deinem Beispiel.

MFG

zEriX
 
Zurück