Probleme mit daten sortierung

newfutur

Grünschnabel
Hallo liebe Tutorials Benutzer :),

ich habe ein Problem um mein Daten zu sortieren

Meine Daten sind in einem Excel Tabelle, es sieht so aus:

Bez / 12 / 412
Fet / 12 / 955

Bez / 57 / 767
Fet / 57 / 807

Bez / 15 / 124
Fet / 15 / 278

Bez / 12 / 124
Fet / 12 / 278

Ich habe vier Gruppen, die sind getrennt mit eine leer Zeichen. Ich will die einfach sortieren nach die zweite reihe aber die Gruppen sollen zusammen bleiben, d.h. ich erwarte folgendes:

Bez / 57 / 767
Fet / 57 / 807

Bez / 15 / 124
Fet / 15 / 278

Bez / 12 / 412
Fet / 12 / 955

Bez / 12 / 124
Fet / 12 / 278

Aber das Programm was ich geschrieben habe, lässt die Gruppen nicht zusammen :confused:!

Kommt folgendes raus:mad::

bez / 57 / 767

fet / 57 / 807

bez / 15 / 124

fet / 15 / 278

bez / 12 / 124

bez / 12 / 124

fet / 12 / 278

fet / 12 / 955

Mein Programme lautet:

Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import java.util.Vector;

public class Häufigkeit {
	      static final String SPLIT = " ";
	      HashMap map = new HashMap();
     void Häufigkeit_1()throws IOException{
	     File dir = new File("C://............");
                     File[] files = dir.listFiles();
                    String[] temp = null; 	
           for (File f: files) { 
	    BufferedReader in = new BufferedReader(new FileReader(f));     
	    String line = null;
	    Vector v = new Vector();   
	     Vector v1 = new Vector();
	while ((line = in.readLine()) != null) {
	     line=line.replace('\\',' ');
	     temp = line.split("	"); 
	   if (line.trim().length() == 0) {    		
	     v.add(v1);
	     v1 = new Vector();    
	     continue;
	  }//if*/
	      v1.add(line);
             }//while
             for(int h=0; h<v.size();h++){
	    Vector v4=(Vector)v.elementAt(h);	        
	  for (int j=0; j<v4.size();j++){
	     String[] S1 =v4.elementAt(j).toString().split(" ");
	      String [] S2 =S1[0].split("	"); 
	       map.put(v4.elementAt(j),S2[1]);
	     }// for: int j	      
               }//for:int h	
        
          Object key;
                   Set set = new TreeSet(new Häufigkeit().new MyComperator());
            for (Iterator it = map.keySet().iterator(); it.hasNext(); ) {
                 key = it.next();
                 set.add(key + Häufigkeit.SPLIT + map.get(key));
            }//for iterator
            for (Iterator it = set.iterator(); it.hasNext(); ) {
                key = it.next();
               System.out.println(key);
               System.out.println(" ");
            }//for Iterator 2  
    	          
      }  //for: file f      
     }//void


         private class MyComperator implements Comparator {  
	 public int compare(Object o1, Object o2) {
	 	         String[] s1 = ((String)o1).split(Häufigkeit.SPLIT);
	 	         String[] s2 = ((String)o2).split(Häufigkeit.SPLIT);
	 	         return this.compare(s1[0], s1[1], s2[0], s2[1]);
                                    } 
 
           private int compare(String s11, String s12, String s21, String s22) {
	 	  if (s12.equals(s22)) {
	 	 return s11.compareTo(s21); 	 	         } 
                                 else {return s22.compareTo(s12); }
	               }// private int compare
       }//private class MyComperator 	 	       
}//public class

ich hoffe das meine frage klar genug ist, ich bedanke mich für eure hilfe.

Newfutur
 
hallo new futur,

könntest du vielleicht noch schreiben wozu das prog ist, den irgendwie weis ich nicht was du bezwecken willst, sehe irgendwie auch nicht bei der sortierung durch

warum machst du nicht die sortierung in excel ?

da du ja nach der zweiten zahl sortieren willst, steht diese zahl in excel in einer eigenen zelle

mfg chris
 
Zuletzt bearbeitet:
na klar kann ich auch das mit excel machen, aber mein problem ist (mit excel) bleiben die gruppen nicht zusammen. :confused:

ich will meine Daten sortieren nach der zweiten spalte,

d.h. bei dem beispiel :

Bez / 12 / 412
Fet / 12 / 955

Bez / 57 / 767
Fet / 57 / 807

Bez / 15 / 124
Fet / 15 / 278
........

werde sortiert durch die 12, 57 und 15

ich erwarte dann:

Bez / 57 / 767
Fet / 57 / 807

Bez / 15 / 124
Fet / 15 / 278

Bez / 12 / 412
Fet / 12 / 955

Newfutur
 
ja verstehe, ich kenne mich net so aus mit excel im zusammenhang mit java, must mal schau ob man SQL bei excel anwenden kann wenn ja ist das nicht so schwer.
hast du mal die leerzeile weggelassen, warum sortierst du nicht datensatz einzeln?

mfg chris
 
das problem ist, ich habe rund 180 Excel tabelle :-) , deswegen habe ich gedacht , es sollte schneller gehen wenn ich das mit Java mache.
 
Hallo,

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

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @author Thomas.Darimont
 * 
 */
public class SortExcelFileExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<Entry> entries = readEntriesFrom(new File("bubu.dat"));
        System.out.println(entries);
        System.out.println("##########");
        Collections.sort(entries);
        System.out.println(entries);
    }

    private static List<Entry> readEntriesFrom(File file) {
        List<Entry> entries = new ArrayList<Entry>();
        try {
            Scanner scanner = new Scanner(file);

            try {
                while (scanner.hasNextLine()) {
                    String bezRow = scanner.nextLine();
                    String fertRow = scanner.nextLine();

                    entries.add(new Entry(bezRow, fertRow));

                    if (scanner.hasNextLine()) {
                        // skip next line
                        scanner.nextLine();
                    }
                }
            } finally {
                if (null != scanner) {
                    scanner.close();
                }
            }

            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return entries;
    }

    static class Entry implements Comparable<Entry> {
        String bezRow;
        String fertRow;

        public Entry(String bezRow, String fertRow) {
            super();
            this.bezRow = bezRow;
            this.fertRow = fertRow;
        }

        @Override
        public int compareTo(Entry other) {
            return other.bezRow.compareTo(bezRow);
        }

        @Override
        public String toString() {
            return bezRow + "\n" + fertRow + "\n";
        }

    }

}

bubu.dat:
Code:
Bez / 12 / 412
Fet / 12 / 955

Bez / 57 / 767
Fet / 57 / 807

Bez / 15 / 124
Fet / 15 / 278

Bez / 12 / 124
Fet / 12 / 278

Ausgabe:
Code:
[Bez / 12 / 412
Fet / 12 / 955
, Bez / 57 / 767
Fet / 57 / 807
, Bez / 15 / 124
Fet / 15 / 278
, Bez / 12 / 124
Fet / 12 / 278
]
##########
[Bez / 57 / 767
Fet / 57 / 807
, Bez / 15 / 124
Fet / 15 / 278
, Bez / 12 / 412
Fet / 12 / 955
, Bez / 12 / 124
Fet / 12 / 278
]

Gruß Tom
 
wenn ich da richtig sehe brauch man für excel keine treiber laden, thomas könnte aber die ganzen tabbellen die er in excel auch in SQl erstellen, ist meiner meinung nach komfortabler?

mit SQl reicht glaub ich grob: select * from Tabelle order by blabla Dsc

dann halt das ergebnis ausgeben

mfg chris
 
Zuletzt bearbeitet:
Danke für eure Hilfe, ich habe das Problem gelöst mit chrisjahl Lösung.

d.h. ich habe meine Daten in SQL transferiert dann select * from Tabelle order by ...

Dann mein Daten wieder zurück ins Excel Tabelle.

Ich habe bitte aber noch ein frage an Thomas Darimont, wie du das Programm geschrieben hast:
Code:
 #
List<Entry> entries = new ArrayList<Entry>();
#
        try {
#
            Scanner scanner = new Scanner(file);
#
 
#
            try {
#
                while (scanner.hasNextLine()) {
#
                    String bezRow = scanner.nextLine();
#
                    String fertRow = scanner.nextLine();
#
 
#
                    entries.add(new Entry(bezRow, fertRow));
.......

diese art vom Code schreiben kenne ich nicht :confused:, sieht für mich so aus als obkt Schreibung ?
 
diese art vom Code schreiben kenne ich nicht :confused:, sieht für mich so aus als obkt Schreibung ?

Was ist obkt Schreibung?

Meinst du wegen der Formatierung? Naja, ist schön, übersichtlich und es gibt irgendwelche komischen Regeln, die sagen wie man sowas formatiert ...
Im Zweifelsfall macht z.B. Eclipse das aber auch voll automatisch. Einfach mal Strg-Shift-F im Quelltext drücken und man kriegt anständig formatierten Code :)
 
hallo,

wieso bist du so auf excel aus, da du ja eh nur die daten in Java benutzt oder ainzeigt kannst du auch diregt auf deine sql datenbank zugreifen

mfg chris
 
Zurück