LogFile.log einlesen und Werte zwischen 5 zeilen vergleichen

Quaz

Mitglied
Hallo liebes Forum,

auf der Suche nach einer Lösung für mein Problem bin ich auf dieses Forum gestoßen.
Es kann durchaus sein, dass ich mein Problem gar nicht mit Java lösen kann.
Aber da ich in vergangenen Tagen die ein oder andere Aufgabe mit java gelöst habe , denke ich das ich hier richtig bin. 🙂

Problemstellung:
Auf der Arbeit, ich arbeite mit AD´s und Datenbanken, habe ich leider etwas "Mist" gebaut und einen Connector zu einer Datenbank mit falschen Werten gefüttert.
Jetzt habe ich in meiner Datenbank c.a. 3000-5000 User die da gar nicht reingehören....

Ich habe nur die eine Möglichkeit mir jetzt aus diesem DFS eine Logfile zu erstellen die aussieht wie folgt:

User ABC have Bindings

(sbconf.Binding.a.....)
(sbconf.Binding.b.....)
(sbconf.Binding.certid)

User DEF have Bindings

(sbconf.Binding.a.....)
(sbconf.Binding.b.....)

User GHI have no Bindings
User JKL have Bindings

(sbconf.Binding.a.....)
(sbconf.Binding.b.....)

Ich müsste nun die log.datei/ txt einlesen und bräuchte eine neue txt.Datei,
in der nur User DEF und JKL auftauchen, da diese keine "certid" haben aber 2 Bindings. User GHI fällt raus, da er gar keine Bindings hat.

Mein Ansatz wäre:
Einlesen der Datei, anhand der Anzahl ein Array erstellen.
Problematik: Wir reden aber über c.a 16000 Einträge, wenn nicht sogar mehr...

Dann eventuell im Array zwischen den einträgen User und User prüfen ob sich darin Bindings befinden, wenn ja prüfen ob Binding certid vorhanden
Wenn also certid vorhanden den User überspringen, wenn gar keine Bindings vorhanden den User auch überspringen.
Restliche User in eine txt.datei schreiben.

Frage die sich mir stellt..:
Ist es überhaupt sinnvoll alle Einträge zu speichern?
Gibt es vielleicht eine Möglichkeit nur diese 6-7 Zeilen zwischen User und User zu cachen und in diesem Moment zu prüfen?
An alle die sich dieser Frage annehmen und mir etwas Hilfestellung leisten möchte ich mich schon im Vorfeld bedanken.

Grüße Quaz
 
Zuletzt bearbeitet:
Du musst ja die Datei nicht als ganzes im Speicher halten. Du kannst die ja Zeilenweise auswerten und wenn du einen passenden Benutzer gefunden hast, dann es rausschreiben.

Du könntest auch versuchen etwas mit RegEx zu basteln, aber die Größenordnung macht mir da ein wenig Sorgen.
 
Also ich würde das vielleicht immer so User mäßig einlesen. Du liest den User ein, danach seine ganzen Bindings. Wenn beim einlesen der nächste User folgt, werden erst die anderen Sachen ausgewertet und dann wird der nächste User erst bearbeitet.
 
Danke für die Antworten 🙂

Mein Ansatz ist nun:

-log.Datei öffnen
-Ergebnis.txt öffnen
-von User bis User einlesen / wenn von User bis User zähler kleiner 1 oder 0 goto next User
-mit vordefinierten Werten vergleichen
-wenn Werte übereinstimmen => schreibe in Ergebnis.txt
-wenn nicht goto next User

Die log ist wie beschreiben so groß, dass sie mit excel nicht eingelesen werden kann (größer 65000 Einträge).
 
Hallo,

hat mit Excel nichts zu tun, wollte nur auf die Größe ansprechen.

So weit bin ich erstmal gekommen, nun setzt mein Halbwissen ein:
Java:
import java.io.*;
import java.util.ArrayList;
import java.util.regex.*;
/**
 * 
 */

/**
 * @author quaz
 *
 */
public class Userpruefen {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
			BufferedReader in = new BufferedReader(new FileReader(new File("User.txt")));
			try {
				String line;
				ArrayList<String> Usernamen = new ArrayList<String>();
				int linecount = 5; // 5 zeilen bis zum nächsten user (wenn keine certid vorhanden(optimalfall))
				while((line = in.readLine()) != null) {
					if (line.matches(User));
					Usernamen.add(line.split(" ").toString());
					line = in.readLine();
					linecount --;
					// ;
					
				}
			}finally{
				in.close();
			}
			BufferedWriter out = new BufferedWriter(new FileWriter(new File("UserNeu.txt")));
			try {
				// s = ....
				out.write(s);
				out.newLine();
			}finally {
				out.close();
			}
	}	
}
 

Neue Themen


Zurück
Oben