Bitte um Rat: Sortieren mit ArrayList

Status
Nicht offen für weitere Antworten.

engelchen194

Mitglied
Hallo zusammen!

Folgende Thematik:

Ich lese einen Logfile zeilenweise ein.
Dieser ist in bestimmte Abschnitte aufgeteilt, welche durch eine "ID(..)" gekennzeichnet sind, die je Abschnitt gleich ist.
Ist in einem solchen Abschnitt das Wort [checkConnection], soll der gesamte Abschnitt automatisch gelöscht werden.
Der Rest wird in eine neue Datei geladen. Habe auch ein Beispiel des LogFiles angefügt.
Dies habe ich auch soweit schon umgesetzt und es funktioniert. Habe dies mit einer ArrayList gelöst,
die, solange die ID´s die gleiche Zahl haben wird weiter zeilenweise eingelesen. Sobald eine neue Zahl kommt, wird die Liste (die
Zeile für Zeile beladen wird)

- entweder ganz gelöscht (wenn checkConnection vorkommt)
- oder in die neue Datei geschoben

Dann wird sie wieder neu beladen usw.

Nun ist der Haken bei der Sache, dass die ID´s teilweise durcheinander sind und sich ein bis zwei Zeilen eines Abschnittes
davor oder danach in einer Sequenz einschleichen. Siehe Beispiel unten.

Dies soll nun so sortiert werden, dass die Zeile, die nicht zum jeweiligen Abschnitt gehört, in den Abschnitt oben bzw. unten eingefügt
wird. --> hier ID(17), soll nach oben zu restlichen ID(17) geschoben werden.

Daher soll die Liste nicht nach jedem Abschnitt gelöscht werden, sondern bestehen bleiben, damit eventuell etwas verschoben werden kann.

LOGFILE-AUSZUG:
Code:
hh:mm:ss:ms ()				ID(17): >>BCD: 

ABC
hh:mm:ss:ms () 				ID(16): >>------------------------------------------------------------<< ABC

hh:mm:ss:ms () 				ID(16): >>ABC

hh:mm:ss:ms () 				ID(16): >>ABC

hh:mm:ss:ms() 				ID(16): >>AttributeNames: 

AB
hh:mm:ss:ms () 				ID(16): >>ParameterNames: 
	
ABC
hh:mm:ss:ms () 				ID(16): >>a[checkConnection] wird nicht n?her untersucht.<< ABC

hh:mm:ss:ms() 				ID(16): >>BCD 

<< ABC	
hh:mm:ss:ms() 				ID(16): >>ABC

hh:mm:ss:ms() 				ID(16): >>1<< ABC

hh:mm:ss:ms () 				ID(17): >>ABC

hh:mm:ss:ms () 				ID(17): >><html><head><title>abc</title></head><body>

hh:mm:ss:ms() 				ID(20): >>------------------------------------------------------------<<

UND HIER NOCH MEIN BISHERIGER CODE:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.util.ArrayList;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.xml.*;


public class CheckConn2_1 {

	public static void main(String[] args){

		File outFile = new File(C://Zielpfad_neu.out");



		String alt_ID = "";
		String neu_ID = "";
		StringBuffer zeile = null;
		int i = 0;

		boolean connection = false;

		BufferedReader reader;
		BufferedWriter bw;
		PrintWriter pw;



//		Einlesen der Datei und festlegen der Ausgabedatei
		try{
			FileInputStream fs = new FileInputStream("C://Quellpfad.log");
			reader = new BufferedReader(new InputStreamReader (fs));

			bw = new BufferedWriter(new FileWriter(outFile, false));
			pw = new PrintWriter(bw);

//			Erzeugen einer ArrayList für das Ablegen der Zeilen mit gleicher ID
			ArrayList<StringBuffer> idList_1 =new ArrayList<StringBuffer>();

			
			// XXX Liste, die alle Sektionen hält
			ArrayList<ArrayList<StringBuffer>> sectionList = new ArrayList<ArrayList<StringBuffer>>();


			while(true){ 
				String tmp;
				if( (tmp = reader.readLine()) != null )
					zeile=new StringBuffer( tmp );	//zeilenweises einlesen
				else zeile = null;
				
				i++;


				if(zeile==null){				//..bis zur letzten Zeile


					if(connection==false){


						for(int z=0; z < idList_1.size(); z++) {
							pw.println(idList_1.get(z));
						}

					}

					break;
				}

//			wenn die Zeile checkConnection enthält, setze connection auf true damit nicht rausgeschrieben wird

				if(zeile.toString().contains("[checkConnection]")){

					connection=true;
				}

//			suche nach Textstelle "ID()"				
				
				if(zeile.toString().contains("ID(")){

					System.out.println(zeile.substring(42,44));
					neu_ID = zeile.substring(42, 44); //schneidet die Zeile, bis auf die Position der Zahlen aus
					if(i==1){
						alt_ID=neu_ID;
					}


					if(!alt_ID.equals(neu_ID)){

						alt_ID=neu_ID;	//wenn die alte ID nicht der neuen gleicht, setze alt_ID auf neu_ID


						if(connection==false){

							for(int z=0; z < idList_1.size(); z++) {	//Zeile um eins erhöhen
								pw.println(idList_1.get(z));
							}

						}else{
							idList_1.clear();
							connection=false;
						}
						sectionList.add( new ArrayList<StringBuffer>( idList_1 ));
						
						

					}else{

						idList_1.add(zeile);

					}

				}else{

					idList_1.add(zeile);
				}
				
	//Ideen			
				
				// wenn gesammelte Zeilen != checkConnection, dann
				// sectionList.add( new ArrayList<StringBuffer>( idList_1 ));
				// sonst, idList.clear() und fahre fort mit den weiteren neuen Zeilen bzw. oben


				
			}
			bw.close();


		}catch (IOException ex){
			ex.getMessage();
		}
	}
	
	
}

Wie würdet ihr das am besten sortieren?
Vielen Dank schon mal für eure Tipps!!
 

Marco13

Top Contributor
Höm. Klingt irgendwie kompliziert. Ohne den Code komplett nachvollzogen zu haben: Du liest ja schon die ID aus. Kannst du nicht alles, was zu einer ID gehört, in einen String (oder meinetwegen zeilenweise in eine ArrayList) speichern, und auf diese Strings/Lists dann mit einer Map zugreifen? Pseudocode
Code:
Map<Integer, List<String>> map = new ...
List<Integer> idsToRemove ...
for (alle Zeilen)
{
    int id = liesID();
    List<String> list = map.get(id);
    if (list == null)
    {
        list = new ArrayList<String>();
        map.put(id, list);
    }
    list.add(eingeleseneZeile);
    if (eingeleseneZeile.contains(diesesCheckDingensDa)) idsToRemove.add(id);
}
for (alle idsToRemove) map.remove(id);
Wenn man dafür eine TreeMap verwendet, ist das ganze dann prakticherweise auch aufsteigend nach IDs sortiert ... und irgendwie hatte deine Frage ja - zumindest dem Betreff nach - was mit "sortieren" zu tun....
 

engelchen194

Mitglied
Hmm.. das wäre eine Möglichkeit...
Es kommt halt nicht jede ID nur einmal vor. Es gibt ziemlich viele die sich wiederholen. Aber ich probier es mal!
Danke!

Was sagst du, besser erst den File einmal komplett einlesen und dann "verarbeiten"(ID ausschneiden, löschen etc.) oder gleich beides in einem Aufwasch??

Grüße
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Robert Zenz Ich brauche bitte mal kurz einen Sanity/Reality-Check betreffend Tests. Allgemeine Java-Themen 9
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
B Bitte um Code Erklärung Allgemeine Java-Themen 5
L Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen. Allgemeine Java-Themen 17
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
V Bilder bei bestimmten Zeiten wechseln, bitte um Hilfe Allgemeine Java-Themen 5
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
I Bitte Drngend hilfe Allgemeine Java-Themen 2
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
M Input/Output Java + OCR ? Erfahrungen und bitte um Hilfe Allgemeine Java-Themen 12
F Bitte um Hilfe! Allgemeine Java-Themen 5
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
S Bitte um Hilfe Allgemeine Java-Themen 8
N "Bitte warten"-Meldung Allgemeine Java-Themen 6
I Studium - bitte dringend helfen !!! Allgemeine Java-Themen 17
C Eclipse spinnt - bitte Helfen! Allgemeine Java-Themen 3
J Probiert mal bitte aus (Thread + Runtime) Allgemeine Java-Themen 10
L Java6 update N bekommt neues Browser-Plugin, bitte testen. Allgemeine Java-Themen 7
J Bitte um Kurzinfo bez. JMF (ja, war bei Forumssuche/google) Allgemeine Java-Themen 2
P Bitte um Hilfe Allgemeine Java-Themen 4
K Hab Sch***e gebaut - Bitte um Hilfe Allgemeine Java-Themen 7
G Zertifikat importieren? Bitte HILFE! Allgemeine Java-Themen 2
J synchronized (bitte beantworten, urgent! danke) Allgemeine Java-Themen 11
I Weiß nicht mehr weiter! Bitte helft mir! Allgemeine Java-Themen 5
P Was ist denn Bitte falsch? Allgemeine Java-Themen 2
M Programmierstill: Bitte testen anhand HTML-Tool Allgemeine Java-Themen 18
M Bitte Testen: Mein Multi-File Editor Allgemeine Java-Themen 30
P Bitte kritisieren: rekursive Sortier-Methode Allgemeine Java-Themen 2
J könnt Ihr mir bitte mal den Fehler erläutern! Allgemeine Java-Themen 5
D Große Klasse - was fällt euch so ins Auge? Kritik bitte! Allgemeine Java-Themen 10
thE_29 Vor dem ersten Posten bitte lesen! Allgemeine Java-Themen 0
K bitte um hilfe bei file import Allgemeine Java-Themen 7
N Compiler (javac) funktioniert nicht... Bitte hilfe! Allgemeine Java-Themen 3
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
B Algortihmus zum linearen Sortieren Allgemeine Java-Themen 1
K ArrayList sortieren Allgemeine Java-Themen 16
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
K Sortieren nach Vorgabe Allgemeine Java-Themen 6
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Sortieren und Leerzeichen Allgemeine Java-Themen 11
W Array Indizes sortieren Allgemeine Java-Themen 16
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
E Array alphabetisch sortieren Allgemeine Java-Themen 1
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
G Map nach key sortieren Allgemeine Java-Themen 14
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
S Int Values sortieren Allgemeine Java-Themen 7
S Sortieren nach Objekten Allgemeine Java-Themen 13
A 2D-array problem (sortieren) Allgemeine Java-Themen 6
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D priority queue sortieren Allgemeine Java-Themen 10
G List<Person> sortieren Allgemeine Java-Themen 6
K Hashmap sortieren Allgemeine Java-Themen 6
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
J Wie sortieren? Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
B JTable nach Icon sortieren Allgemeine Java-Themen 6
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
J Map nach value sortieren Allgemeine Java-Themen 14
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
O Sortieren von Telefonnummern Allgemeine Java-Themen 8
D JTabel sortieren nach mehreren kriterien Allgemeine Java-Themen 3
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben