Textdateien splitten, neu schreiben

Bluedaishi

Bekanntes Mitglied
Guten Abend
ich habe folgendes Problem , ich habe eine Text datei unterschiedlicher grösse
sie enthält "Einsprung marken" die sich immer wieder holen sobald ein text abschnitt zuende und wieder
anfängt.
ich möchte diese an den einsprung marken splitten und den Text dazwischen in eine neue datei schreiben
wieviel abschnitte enthalten sind ist unbekannt es 6 oder 1 oder 100 sein usw.

ich hoffe ihr könnt mir irgendwie weiter helfen

vielen dank
 
Zuletzt bearbeitet von einem Moderator:
Datei zeilenweise lesen und schreiben.

Beim Marker: Alten Stream schließen, neuen Stream öffnen und weiter gehts.
 
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Splitter {

	/**
	 * @param args
	 * @throws IOException 
	 */
	
	
	public static void main(String[] args) throws IOException {
		
		String line = null;
		int dateiLaenge = getZeilenAnzahl();
		int count = 0;
		int anzahl = 0;
		int anfang = 0;
		int anfang1 = 0;
		int ende = 0;
		
		try {
			BufferedReader br = new BufferedReader(new FileReader("E:\\daten.txt"));
		
			while ( br.readLine() != null){
				
				count++;
				line = br.readLine();
				
				if(line.contains("Sp")){
					anfang = count;
				}
				
				if(line.contains("S7p")){
					anfang1 = count;
				}
				
				
				if(line.contains("")){
					ende = count;
				}
				
				anzahl = ende - anfang ;
				System.out.println(anzahl);
				for(int i = 0; i < anzahl ; i++ ){
					line = br.readLine();
					//System.out.println(line);
				}
				
				
			}
			
		}catch (Exception ex) {
		      ex.printStackTrace();
		    }	
		

		}
					

	

	
	private static int getZeilenAnzahl() {
		
		int count = 0;
		try {
		      BufferedReader br = new BufferedReader(new FileReader("E:\\daten.txt"));
		      while ( br.readLine() != null ) {
		        count++;
		      } 
		      br.close();
		    }
		    catch (Exception ex) {
		      ex.printStackTrace();
		    }
		return count;
	}

}


das ist das was ich bis jetzt habe :-(
 
Also die Zeilenanzahl ist ja schon mal unerheblich oder?

Wie sehen die marker aus?

beachte, dass jeder aufruf von readLine() eine Zeile weiter liest.

Du überliest also jede zweite Zeile.

---
Hinweis auf den Edit Button.
 
ja das ist richtig ich will die einsprung marke nicht mit in die neue datei schreiben
die einsprung marken sind sind line.contains("....") zusehen 🙂
 
Ja aber durch das while(readLine() != null) und dann nochmal line = br.readLine(); liest du jede zweite Zeile.

---

Ansonsten sieht der Anfang doch gut aus. Aber bei den markern musst du jedesmal den Outputstream schließen und einen neuen erstellen. und nicht irgentwas mit anfang - ende...
 
Die Zeilen anzahl zwischen den Markern kann unterschiedlicher länge sein , die gesamt länge wollte ich für eine for schleife behalten 🙂
 
mit dem line = br.readLine(); wollte ich die zeile in die neue datei schreiben lassen, und anfang und ende für die berechnung der zeilen anzahl zwischen den markern 🙂 und den output stream muss ich bei dem end marker schliessen den der ist am text ende immer der selbe 🙂 ausserdem ist mir noch nicht ganz klar wie ich die neuen text dateien neu wegschreiben lasse ohne das sie wieder überschreiben werden ich müsste eine zahl mit anhängen zb. text1.txt usw
 
Zuletzt bearbeitet:
Nochmal der Hinweis auf den EDIT Button des Forums.

--

Das ist mir schon klar!

Das vorgehen sollte sein:

OutputStream definieren.
InputStram definieren.
String Zeile definieren.

solange die nächste Zeile != null ist:
Prüfe, ob Zeile einen marker enthält:
wenn ja, dann schließe Outputstream;
öffne Neuen InputStram;
wenn nein, dann schreibe aktuelle Zeile in OutputStream.
ende.
 
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Splitter {

	/**
	 * @param args
	 * @throws IOException 
	 */
	
	
	public static void main(String[] args) throws IOException {
		
		String line = null;
		
		
		try {
			BufferedReader br = new BufferedReader(new FileReader("E:\\text.txt"));
			BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Temp\\text.txt"));
			
			while ( br.readLine() != null){
					
				if(line.contains("Sp")){
					while ((line = br.readLine()) != null){
					line = br.readLine();
					bw.write(line);
					}
				}else if(line.contains("")){
					
					bw.flush();
				
				}
				
			
				
				
			
				
				
			}
			
		}catch (Exception ex) {
		      ex.printStackTrace();
		    }	
		

		}
					
}

die neue text datei ist leer und ich bekomme ein null.pointer Exception
 
Im Stacktrace stehen alle Informationen dazu.

Eventuell mal danach googeln.

Ebenfalls mal in die Hilfe des Forums mal schauen, wie man Beiträge nachträglich ändern kann.

Ich würde auch nochmal genau durchlesen, was ich geschrieben habe. Zum einen fällt auf, dass ich nur eine While schleife habe. (while bedeuet hier "solange")
 
Java:
 String line = null;
.
.
.
while ( br.readLine() != null){
                    
                if(line.contains("Sp")){
.
.
.

Bei
Java:
if(line.contains("Sp")
ist line = null, da es nirgendwo gesetzt wird.

ändere das innere der while Schleife mal in
Java:
while ( (line = br.readLine()) != null )
dann wird jede Zeile in der variablen line zwischengespeichert udn du kannst da auch was mit anfangen
 

Zurück
Oben