wie kann man eine Text-Datei in eine andere Text-Datei konvertieren.
Das Programm muss eine Datei auslesen und nach der Konvertierung in die zweite Datei schreiben.
Das Problem ist, dass die Datei zum Auslesen keine Zeilenumbrüche enthält, sie besteht aber aus vielen Zeilen, jede Zeile ist 4096 lang (wahrscheinlich max Länge vom Editor).
Die Datei (Inhalt wie eine lange Zeichenkette) besteht aus vielen Sätzen, der erste Satz ist ein Vorlaufsatz, der immer 128 Zeichen lang ist, dann folgen zB. x Sätze je 380 Zeichen lang (also insgesamt x*380 Zeichen lang) und am Ende ein Nachlaufsatz 128 Zeichen lang.
Aus jedem Satz muss man bestimmte Informationen auslesen und in die Ausgabedatei ausgeben (Das Format ähnlich wie ausgelesene Datei auch ohne Zeileumbrüchen, nur andere Satzlänge
(erste Satz 256 lang dann x*300, und am Ende 256).
Ich hoffe dass ich mich verständlich ausgedruckt habe und ich wäre sehr dankbar für ein Beispiel.
In der ersten Datei stehen also bestimmte Befehle, die in einer anderen Datei umgesetzt werden sollen?
Die Befehle haben immer dieselbe bekannte Anzahl Zeichen.
Am Anfang und am Ende stehen immer bekannt viele Zeichen.
Du kannst die letzten 128 Zeichen erst mal abschneiden, sodass du weißt, wann die Sätze aufhören. Dann läufst du den String lang und suchst pro Satz nach Befehlen. Da werden dir der switch-case und enumerationen sehr helfen.
Wenn es dir hilft, kannst du den Text noch in Befehle einteilen und diese in einer Liste abspeichern.
Es ist nur ein bisschen mühsam, weil du in deiner Programmierung alle möglichen Befehle abdecken musst.
Das mit den fehlenden Zeilenumbrüchen ist egal. Die sind streng genommen nur zwei nervige Zeichen, die du irgendwie entfernen müsstest.
Die Vorgehensweise:
Du ließt den String ein.
Du machst irgendwas mit den ersten 128 Zeichen, dass die dich nicht stören und schneidest die letzten 128 Zeichen erst mal ab.
Du läufst am String entlang und suchst nach Befehlen, die du ausführen kannst.
Die Ausführungen schreibst du in einen weiteren String nach dem geforderten Format.
Nach 350 Zeichen vergisst du den vorherigen Befehl und suchst nach einem neuen.
Das machst du, bis du am Ende angekommen bist. Dann machst du irgendwas mit den letzten 128 Zeichen.
Für weiterführende Tipps fehlen mir Informationen. Was soll zu was werden? Hast du ein Beispiel?
so wie Du vorgeschlagen hast, habe ich umgesetzt, und das funktioniert auch. Danke !!!:toll:
Ich lese InputStream (bei mir ein Satz) in einen String.Dann vearbeite ich den String so, daß ich ihn auf Vorlaufsatz, Nachlaufsatz und Rest aufteile.
Alles was Rest beihnaltet wird wieder auf die Sätze 384 Zeichen lang (Bodysatz) aufgeteilt.
Alle Sätze (Vorlaufsatz, Bodysatz, Nachlaufsatz) getrent mit 'r\n' werden in die Ausgabedatei geschrieben.
Die Ausgabedatei kann ich zeilenweise weiter vararbeiten (konvertieren).
Ich weiß noch nicht ob ein String für InputStraem eine Grenze hat und ob auf dieser Stelle was anders sinvoller wäre?
Ob man tokenizer für Aufteilung nutzen kann, wenn nur Size des Satzes bekannt ist?
So sieht das Source aus:
Java:
publicvoidverarbeite(String file_input,String path_input,String file_output,String path_output
){try{
in =newBufferedReader(newFileReader(path_input +"\\"+ file_input));//geoefnet in append Modus
out =newBufferedWriter(newFileWriter(path_output +"\\"+ file_output));//String sZeile;int i=0;
sZeile = in.readLine();//Lese InputStream//hier wird InutStream auf einen Vorlaufsatz, Nachlaufsatz und Rest aufgeteiltString sVorlaufsatz = sZeile.substring(0,128);String sNachlaufsatz = sZeile.substring(sZeile.length()-128,sZeile.length());String sRest = sZeile.substring(128, sZeile.length()-128);//ohne Vorlaufsatz und ohne Nachlaufsatz//Schreibe den Vorlaufsatz
out.write( sVorlaufsatz);
out.write(System.getProperty("line.separator"));// Hier wird Bodysatz auf einzelne Sätze mit Länge 384 aufgeteilt undwhile(i*384< sRest.length()){int von =i*384;int bis = i*384+384;String sBodysatz = sRest.substring(von, bis);//schreibe den selektierten Satz aus Bodysatz
out.write( sBodysatz);
out.write(System.getProperty("line.separator"));
von = bis;
i++;}//Schreibe den Nachlaufsatz
out.write( sNachlaufsatz );
out.write(System.getProperty("line.separator"));}//Ende try
Also du ließt deinen Text ein, stückelst ihn, schreibst ihn in eine Datei und ließt ihn wieder ein?
Ich weiß nicht, wie viele Zeichen ein String haben kann aber es sind genug. Sollten es mal wider Erwarten nicht genug sein, dann stückelst du auch den in mehrere Teile und schreibst dann in eine Datei. Aber ich sags mal so: Die Bibel wurde auch an einem PC, der mit Strings arbeitet, geschrieben. Viele Zeichen sind also kein großes Problem (sofern der PC genug Speicher hat).