W
Wolfgang, 43
Gast
Moin,
Ich sitzte jetzt schon seid Tagen an einer Aufgabe fürs Studium und komme zu keinem brauchbarem Ergebnis. Vieleicht könnt Ihr mir ein wenig auf die Sprünge helfen.
Aufgabe:
Definieren Sie eine Klasse TextfileSplitter, die eine Textdatei liest und in mehrere Ausgabedateien kopiert. Bestimmte Zeilen beginnen jeweils eine neue Ausgabedatei. Die Ausgabedateien heißen genauso wie die Eingabedatei, wobein ein Punkt und eine dreistellige, fortlaufende Nummer ab 000 angefügt wird.
Eine konkrete Implementierung der in TextfileSplitter abstrakten Methode
entscheidet, ob mit line eine neue Ausgabedatei beginnt (Ergebnis true) oder nicht (Ergebnis false).
Das nachfolgende Programmfragment trennt die Eingabedatei an Zeilen, die mit dem Buchstaben "s" beginnen, in Teildateien auf:
Zum Beispiel wird die folgende Eingabedatei
abra
ka
dabra
sim
sala
bim
zerlegt in die Ausgabedateien:
input.txt.000:
abra
ka
dabra
input.txt.001:
sim
input.txt.002:
sala
bim
-------------------------------------------------------------------------------------------------------
Meine bisherige Implementierung:
main-class:
Beim Ausführen erhalte ich folgendes Ergebnis:
EINGABE:
Eingabe.txt:
abra
ka
dabra
sim
sala
bim
zerlegt in die AUSGABE:
0TextAusgabe.txt:
abra
1TextAusgabe.txt:
sim
2TextAusgabe.txt:
sala
Vieleicht findet sich ja einer, der Interesse an meinem Problem hat. Danke schonmal im Voraus.
Liebe Grüße,
Wolfgang
Ich sitzte jetzt schon seid Tagen an einer Aufgabe fürs Studium und komme zu keinem brauchbarem Ergebnis. Vieleicht könnt Ihr mir ein wenig auf die Sprünge helfen.
Aufgabe:
Definieren Sie eine Klasse TextfileSplitter, die eine Textdatei liest und in mehrere Ausgabedateien kopiert. Bestimmte Zeilen beginnen jeweils eine neue Ausgabedatei. Die Ausgabedateien heißen genauso wie die Eingabedatei, wobein ein Punkt und eine dreistellige, fortlaufende Nummer ab 000 angefügt wird.
Eine konkrete Implementierung der in TextfileSplitter abstrakten Methode
Java:
boolean splitAt(String line)
Das nachfolgende Programmfragment trennt die Eingabedatei an Zeilen, die mit dem Buchstaben "s" beginnen, in Teildateien auf:
Java:
new TextfileSplitter() {
boolean splitAt(String line) {
return line.startsWith("s");
}
}.split("input.txt");
Zum Beispiel wird die folgende Eingabedatei
abra
ka
dabra
sim
sala
bim
zerlegt in die Ausgabedateien:
input.txt.000:
abra
ka
dabra
input.txt.001:
sim
input.txt.002:
sala
bim
-------------------------------------------------------------------------------------------------------
Meine bisherige Implementierung:
Java:
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class TextfileSplitter {
static Writer fw = null;
public static void createTxt(int txtCount, String Text) {//erstellt neue .txt
try
{
fw = new FileWriter( txtCount+"TextAusgabe.txt");
fw.write( Text );
fw.append( System.getProperty("line.separator") ); // e.g. "\n"
}
catch ( IOException e ) {
System.err.println( "Konnte Datei nicht erstellen" );
}
finally {
if ( fw != null )
try { fw.close(); } catch ( IOException e ) { }
}
}
public static boolean splitAt(String line) {//Soll abstract sein. Läuft aber noch nicht!!
//Enthält die Bedingung, für welche eine neue .txt erstellt werden soll.
if (line.startsWith("s")){return true;}
return false;
}
public static void addText(String Text){//Soll Text einer bestehenden .txt hinzufügen
try {
fw.write(Text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
main-class:
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class main extends TextfileSplitter {
public static void main(String[] args) throws IOException {
BufferedReader ein = new BufferedReader(new FileReader(args[0]));// TXT
// einlesen
String zeile = ein.readLine();
int count = 0;// txt-counter...
while ((zeile = ein.readLine()) != null) {
if (splitAt(zeile) == true) {
count++;
createTxt(count, zeile);// neue txt werd erstellt
// "1TextAusgabe", "2TextAusgabe"...etc.
} else {addText(zeile);}// zeile muss in der zuletzt erstellen .txt geschrieben werden
//NullPointerException bei der bisherigen implementierung
}
}
}
Beim Ausführen erhalte ich folgendes Ergebnis:
EINGABE:
Eingabe.txt:
abra
ka
dabra
sim
sala
bim
zerlegt in die AUSGABE:
0TextAusgabe.txt:
abra
1TextAusgabe.txt:
sim
2TextAusgabe.txt:
sala
Vieleicht findet sich ja einer, der Interesse an meinem Problem hat. Danke schonmal im Voraus.
Liebe Grüße,
Wolfgang