Zeilen sortieren

Webrat

Grünschnabel
Hallo Leute,

wie Ihr Euch sicherlich gleich denken könnt habe ich ein Problem, bei dem ich mir erhoffe, dass Ihr mir helfen könnt.

Die Aufgabenstellung klingt eigentlich ganz einfach, doch ich bekomme es einfach nicht hin.
Ich habe ein Textfile mit lauter Zeilen gleicher Art.
Jede Zeile ist folgendermassen aufgebaut (der String wurde von mir schon in einzelteile zu den einzelnen double-werten "zerhackt"):

Zeile1: doublezahl11 doublezahl12 doublezahl13 doublezahl14
Zeile2: doublezahl21 doublezahl22 doublezahl23 doublezahl24
.
.
.
Zeilen: doublezahln1 doublezahln2 doublezahln3 doublezahln4

Die Werte der doublezahlen variieren dabei in jeder Zeile.

Ich möchte nun das ganze sortiert in eine neue Datei schreiben und zwar nach doublezahl4.
Wie kann ich dies erreichen (mehrdimensionale Arrays, HashTrees...?)

Bin echt am verzweifeln, da das Problem ja eigentlich nicht schwer aussieht. Ich glaube ich komme nur einfach nicht drauf. :confused:

Danke und Gruß
Webrat
 
Hallo!

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 * @author Tom
 * 
 */
public class FileSortExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        File file = new File("c:/doubleNumbers.txt");
        writeRandomNumbersToFile(file, 10);

        List<Row> rows = readRowsFrom(file);

        Collections.sort(rows);

        writeSortedNumbersToFile(rows, new File("c:/doubleNumbersSorted.txt"));

    }

    private static void writeSortedNumbersToFile(List<Row> rows, File file)
            throws Exception {
        PrintWriter printWriter = new PrintWriter(new FileOutputStream(file));
        for (Row row : rows) {
            printWriter.println(row);
        }
        printWriter.close();
    }

    private static List<Row> readRowsFrom(File file) throws Exception {
        List<Row> rows = new ArrayList<Row>();
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            rows.add(Row.valueOf(scanner.nextLine()));
        }
        return rows;
    }

    private static void writeRandomNumbersToFile(File file, int rowCount)
            throws Exception {
        if (file.exists()) {
            file.delete();
        }
        Random random = new Random();
        PrintWriter printWriter = new PrintWriter(new FileOutputStream(file));
        for (int i = 0; i < rowCount; i++) {
            printWriter.print("Line");
            printWriter.print(i);
            printWriter.print(": ");
            printWriter.print(random.nextDouble() * 100.0);
            printWriter.print(" ");
            printWriter.print(random.nextDouble() * 100.0);
            printWriter.print(" ");
            printWriter.print(random.nextDouble() * 100.0);
            printWriter.print(" ");
            printWriter.println(random.nextDouble() * 100.0);
        }
        printWriter.close();
    }

    static class Row implements Comparable<Row> {
        String prefix;

        double number1;

        double number2;

        double number3;

        double number4;

        public int compareTo(Row otherLine) {
            return Double.compare(number4, otherLine.number4);
        }

        static Row valueOf(String lineString) {
            Row line = new Row();
            String[] tokens = lineString.split(" ");
            line.prefix = tokens[0];
            line.number1 = Double.parseDouble(tokens[1]);
            line.number2 = Double.parseDouble(tokens[2]);
            line.number3 = Double.parseDouble(tokens[3]);
            line.number4 = Double.parseDouble(tokens[4]);
            return line;
        }

        public String toString() {
            return prefix + " " + number1 + " " + number2 + " " + number3 + " "
                    + number4;
        }
    }
}

Gruß Tom
 
Zurück