R3laX Geschrieben 27. Januar 2011 Teilen Geschrieben 27. Januar 2011 Hallo Leute, habs dann auch mal hier her geschafft :-)... und ich scheitere schon wieder an einer Aufgabe.. Wir sollen ein Programm schreiben das x-beliebige Dateien auf ein String durchsucht und diese dann durch einen anderen Strind ersetzt. Ich hab das auch soweit gut hinbekommen. Mein Programm kann jetzt folgendes. Es fragt nach einer Datei... dann nach einer zweiten Datei naja ok nicht ganz Sinn der Aufgabe aber immerhin schon etwas. Somit funktioniert, wenn man zweimal den selben Dateipfad angibt, schonmal die Ersetzung. Es fragt einen String nachdem gesucht werden soll und nach einem String das den ursprünglichen String ersetzt. Funktioniert wunderbar!!! Jetzt mein Problem: ich schaffe es einfach nicht raus zu bekommen wie ich beliebig viele Dateien aussuchen kann. Ich denke mal das eine ArrayList das richtige wäre und hab mich wirklich mehr als durch gelesen aber ich kann es einfach nicht umsetzen.. Das einzigste was ich noch geschafft habe ist eine ArrayList zu erstellen die die Zeilen jeweils als Array beinhaltet. Aber ich glaube das war wohl Zeitverschwendung. Würde ja dann auf mehrere Arraylisten hinauslaufen bzw x-beliebig viele. Matrix? ich bitte wirklich dringends um hilfe ich kann echt nciht mehr... Hier mein Programm: import de.htw.saarland.stl.Stdin; import java.io.*; public class ReadDokument { public static void main(String[] args) throws IOException { String objekt; String suchstring; String ersetzungsstring; String ausgabeobjekt; objekt = Stdin.readlnString("Woraus soll gelesen werden?: "); ausgabeobjekt = Stdin.readlnString("Wohin soll geschreiben werden?: "); suchstring = Stdin.readlnString("Bitte Suchstring angeben: "); ersetzungsstring = Stdin.readlnString("Bitte Ersetzungsstring angeben: "); FileReader fileReader = new FileReader(new File(objekt)); BufferedReader in = new BufferedReader(fileReader); String s = in.readLine(); File out = new File(ausgabeobjekt); try { FileWriter ausgabe = new FileWriter(out); BufferedWriter raus = new BufferedWriter(ausgabe); while ( s != null) { raus.write(s.replace(suchstring, ersetzungsstring) + "\n"); System.out.println(s.replace(suchstring, ersetzungsstring)); s = in.readLine(); } //Schließe den InputStream raus.close(); ausgabe.close(); } catch (IOException e) { System.err.println(e.toString()); } in.close(); fileReader.close(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. Januar 2011 Teilen Geschrieben 27. Januar 2011 In Deinem Code ist keine Arraylist vorhanden. Man braucht für das Problem keine Arraylist und eine Matrix schon gar nicht. Entweder liest Du so lange Dateien ein, bis der User es abbricht, und führst die entsprechende Aktion, dann immer pro eingelesene Datei durch oder Du liest erst alle Dateien in eine Arraylist ein und führst dann die Aktion pro Eintrag in der Liste durch. Ich würde Dir ganz dringend auch zu einer prozeduralen Kapselung raten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R3laX Geschrieben 27. Januar 2011 Autor Teilen Geschrieben 27. Januar 2011 Danke dir für die schnelle Antwort. Mhh hier ist erstmal das was ich mir unter der Arrayliste vorgestellt habe.. Klappt auch ganz gut, zumindest der Ansatz. try { FileWriter ausgabe = new FileWriter(out); BufferedWriter raus = new BufferedWriter(ausgabe); // lies alle Zeile aus, bis keine mehr vorhanden sind. // falls Datei leer, überspringe diesen Programmabschnitt int zaehler = 0; ArrayList<String> liste = new ArrayList<String>(); for ( String j; (j = bufr.readLine()) != null; zaehler++ ){ System.out.println( j.replace(suchstring, ersetzungsstring) ); // schreibe in ArrayList liste.add( j ); raus.write(j.replace(suchstring, ersetzungsstring) + "\n"); } Naja das solange einlesen klappt nicht da das ja in einem Satz erledigt wird. Oder meinst du mit einer Schleife? Das Problem ist dass die Arrayliste hier oben zwar einließt aber pro Zeile, die eingelesen wird ein Array belegt. Und das abspeichern raus.write***** funktioniert nicht. Wenn ich mit Object o.... die einzelnen Strings aufrufe gibt er mir auch den geänderten Text aus. Also es funktioniert schon. Nur wie bekomme ich das aus den Strings in eine beliebige Datei gespeichert? Pro Datei eine neue ArrayList? Das ganze muss nach dem chema laufen: Datei hinzufuegen: (j/n) ----> j ---> neue arraylist1 ---->datei1 einlesen Datei hinzufuegen: (j/n) ----> j ----> neue arraylist2 --->datei2 einlesen Datei hinzufuegen: (j/n) ----> n ----> stings in erster und zweiter arryliste durchsuchen und ersetzen --- speichere und dann anstatt read jetzt write um die wörter in den jeweiligen Dateien zu ersetzen. Es sind eben zwei dateien und nicht nur eine. und es können x-beliebige sein. Ich weiß nciht wie ich das machen soll. Was meinst du mit prozeduralen Kapselung? Bin noch ein ziehmlicher Anfänger und hab wirklich lange dran gearbeitet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 27. Januar 2011 Teilen Geschrieben 27. Januar 2011 Ich hab das auch soweit gut hinbekommen. Mein Programm kann jetzt folgendes. Es fragt nach einer Datei... dann nach einer zweiten Datei naja ok nicht ganz Sinn der Aufgabe aber immerhin schon etwas. Somit funktioniert, wenn man zweimal den selben Dateipfad angibt, schonmal die Ersetzung. Es fragt einen String nachdem gesucht werden soll und nach einem String das den ursprünglichen String ersetzt. Funktioniert wunderbar!!! Ich verstehe nicht ganz, worauf Du hinauswillst. Eine Möglichkeit wäre ein Dictionary / Assoziatives Array, wo als Schlüssel der Dateiname/Pfad und auf der anderen Seite eine Dictionary, wo die Mappings festgehalten werden. So wäre gewährleistet, dass immer das aktuellste Statement berücksichtigt wird - bei doppelter Zuordnung wird das alte einfach überschrieben. Alternativ auf eine Datei beschränkt würden auch einfach drei String-Variablen reichen: eine mit dem Dateinamen, eine mit dem Suchstring und zuletzt eine mit dem ersetzten Inhalt. Das einzigste was ich noch geschafft habe ist eine ArrayList zu erstellen die die Zeilen jeweils als Array beinhaltet. Aber ich glaube das war wohl Zeitverschwendung. Würde ja dann auf mehrere Arraylisten hinauslaufen bzw x-beliebig viele. Matrix? Was hast Du vor? Nachdem Du weißt, welche Datei(en) Du durchsuchen willst, und weißt was Du wie ersetzten sollst, musst Du lediglich in einer Schleife jeweils eine Datei öffnen, durchsuchen, Inhalte ggf ersetzen, schliessen, bis alle abgearbeitet sind. Fertig! Wo ist das Problem? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R3laX Geschrieben 27. Januar 2011 Autor Teilen Geschrieben 27. Januar 2011 Ohh jeehh ich glaub ich hab grad ein Burnout... also ich möchte eine Arrayliste erstellen die Arrays beinhaltet. Pro Array eine Zeile der Datei. So habe ich Arraylist1 ---> array[zeile1] array[zeile2] usw.... dann möchte ich noch eine arraylist erstellen mit genau dem selben Schema. Arraylist2 ---> array[zeile1] array[zeile2] usw wenn man jetzte möchte dann noch eine 3te oder 4te oder x beliebig viele eben. die arraylisten heißen genau so wie der dateipfad den ich auswähle wie ichs hier gemacht habe: String objekt; FileReader fileReader = new FileReader(new File(objekt)); String ausgabeobjekt; File out = new File(ausgabeobjekt); wenn ich damit fertig bin dann verlange ich nach dem suchstring und den ersetzstring dann führe die operationen auf beliebig viele Strings aus und überschreibe die jeweiligen Dateien. das problem ist das ich ja verschiedene dateien also arraylisten habe. Das muss doch irgendwie zu realisieren sein oder? Nachdem Du weißt, welche Datei(en) Du durchsuchen willst, und weißt was Du wie ersetzten sollst, musst Du lediglich in einer Schleife jeweils eine Datei öffnen, durchsuchen, Inhalte ggf ersetzen, schliessen, bis alle abgearbeitet sind. Fertig! Wo ist das Problem? ich weiß nciht ob das so eine gute Idee ist.. hier einmal die Aufgabenstellung: Aufgabe ------- Erstellen Sie ein Java-Programm zum Suchen und Ersetzen von Texten in Dateien. Der Aufruf soll wie folgt erfolgen: java Replace suchstring ersetzungsstring datei1 datei2 .... Zu beachten: - Suchstring und Ersetzungsstring müssen nichtleer und verschieden sein. - Es muss mindestens eine Datei angegeben sein. - Die Dateien müssen existierende normale Dateien sein. - Es muss Schreibrecht auf die Dateien bestehen. - Jede Datei ist zeilenweise zu durchlaufen. Dabei ist jeweils das Suchstring so oft es vorkommt zu ersetzen. - Überlegen Sie sich, wie Sie es hinbekommen, dass die Datei selbst wieder überschrieben wird. - Mögliche Ausnahmen sind explizit zu behandeln. ACHTUNG: Testen Sie Ihr Programm nur mit unwichtigen Dateien! ~~~~~~~~ ZUSATZ: Es sind eigene Ausnahmeklassen zu verwenden! ~~~~~~~ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. Januar 2011 Teilen Geschrieben 27. Januar 2011 Nach Aufgabenstellung ist sogar keine Arraylist notwendig ! Du musst nur die entsprechenden Parameter der Main-Methode richtig verarbeiten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R3laX Geschrieben 27. Januar 2011 Autor Teilen Geschrieben 27. Januar 2011 ja. kein wunder.. und ich mach mir son Stress.. ich habs jetzt auch gemerkt... jetzt gehts weiter.. Gott sei dank.. wenn ich nochmal eine Frage habe, und das ist bestimmt so, dann meld ich mich nochmal... Wirklich vielen dank für all eure Gedult mit mir N00bie :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.