Hallo leuts.
bin neu in dem forum und wollte gleich die gelegenheit ergreifen und alle grüßen.
ich habe da ein problem:
ich möchte ein programm scheiben, dass in der lage ist eine txt Datei von der Festplatte zu öffnen, sie anzuzeigen und dann gewisse textpassagen zu ersetzen. (Bsp. wäre ein Serienbrief, der an der Stelle wo #name steht dann den wirklichen namen reinschreibt)
ich hab da auch schon ein wenig vorgearbeitet, habe da aber so meine problemchen wo ich nicht richtig weiter komme.
1: ich kann mit diesem code bis jetzt ein textdatei einlesen ( aber nur die erste zeile :-( )
2: und kann damit nach einem wort suchen lassen und mir ausgeben lassen, in welcher zeile es steht.
1: wie bekomme ich es hin, dass er den ganzen text nimmt?
(könnte ich es in einem array lösen? das bei jeder neuen zeile das array vergrößert?)
(wobei da ist doch mein problem, dass ich nicht genau weiß wie groß die txt datei ist)
2: wie bekomme ich es hin, an der stelle wo das pattern gefunden wurde, ein anderes wort hinzuschreiben (quasi das pattern zu ersetzen?)
wäre sehr dankbar, wenn mir jemand ein wenig auf die sprünge helfen könnte.
p.s. und sorry wegen dem langen code. ich muss zugeben, ein paar teile (z.b. die suche nach dem pattern) hab ich per cut and paste eingefügt.
bin neu in dem forum und wollte gleich die gelegenheit ergreifen und alle grüßen.
ich habe da ein problem:
ich möchte ein programm scheiben, dass in der lage ist eine txt Datei von der Festplatte zu öffnen, sie anzuzeigen und dann gewisse textpassagen zu ersetzen. (Bsp. wäre ein Serienbrief, der an der Stelle wo #name steht dann den wirklichen namen reinschreibt)
ich hab da auch schon ein wenig vorgearbeitet, habe da aber so meine problemchen wo ich nicht richtig weiter komme.
1: ich kann mit diesem code bis jetzt ein textdatei einlesen ( aber nur die erste zeile :-( )
2: und kann damit nach einem wort suchen lassen und mir ausgeben lassen, in welcher zeile es steht.
1: wie bekomme ich es hin, dass er den ganzen text nimmt?
(könnte ich es in einem array lösen? das bei jeder neuen zeile das array vergrößert?)
(wobei da ist doch mein problem, dass ich nicht genau weiß wie groß die txt datei ist)
2: wie bekomme ich es hin, an der stelle wo das pattern gefunden wurde, ein anderes wort hinzuschreiben (quasi das pattern zu ersetzen?)
wäre sehr dankbar, wenn mir jemand ein wenig auf die sprünge helfen könnte.
p.s. und sorry wegen dem langen code. ich muss zugeben, ein paar teile (z.b. die suche nach dem pattern) hab ich per cut and paste eingefügt.
Code:
import java.io.*;
public class Anwendung {
public static String readString () {
int ch;
String input = new String("");
boolean fertig = false;
while (!fertig) {
try {
ch = System.in.read();
if (ch < 0 || (char)ch == '\n')
fertig = true;
else if ((char)ch != '\r') input = input + (char)ch;
} catch (java.io.IOException e) {
fertig = true;
}
}
return input;
}
public static String readFile(String textFileName) {
String line=(" ");
try{
FileReader file = new FileReader(textFileName);
BufferedReader puffer = new BufferedReader (file);
boolean eof = false;
while (!eof){
line = puffer.readLine();
if (line == null)
eof = true;
return line;
}
puffer.close();
}catch (IOException e) {
System.out.println("--- Error --- " + e.toString() );
}
return line;
}
/**
* Distanztabelle
*/
private static int [] delta;
/**
* Implementierung des Algorithmus nach [B]Boyer und Moore[/B]
*
* @param text char-Array, welches durchsucht wird
* @param pattern Suchmuster String
* @return Trefferposition; -1 im Falle keines Treffers
*/
public static int boyerMoore(String text, String pattern) {
if (text.length() < pattern.length()) // BM1
return -1;
// Aufbau der Distanztabelle
delta(pattern);
// Initialisierung
int textPos = pattern.length() - 1, patternPos, merkePos; // BM2
while (textPos < text.length()) { // BM3
patternPos = pattern.length() - 1;
merkePos = textPos;
while (text.charAt(textPos) == pattern.charAt(patternPos)) {
if (patternPos == 0)
return textPos; // Treffer
patternPos--;
textPos--;
} // while
// Weiterruecken nach Distanztabelle
textPos = merkePos + delta[text.charAt(merkePos)];
} // while
return -1; // kein Treffer BM4
} // boyerMoore
/**
* Aufbau der [I]Sprungweitentabelle[/I]
*
* @param pattern Suchmuster (char[])
* @return Referenz auf Sprungweitentabelle
*/
private static void delta(String pattern) {
// Groesse der Distanztabelle
// (Annahme: verwendter Zeichensatz bis maximal Unicode 255)
final int max = 256;
delta = new int[max];
// Belegung aller Felder: allgemener Fall ist Patternlaenge
for (int i = 0; i < max; i++)
delta[i] = pattern.length();
// Belegung der vorhandene Buchstaben des Pattern
// die Schleifenrichtung ist wichtig
for (int i = pattern.length() - 1; i > 0; i--)
delta[pattern.charAt(pattern.length() - 1 - i)] = i;
} // delta
public static void main(String args[]) {
String text, pattern, fileName;
System.out.print("\n Bitte Namen der zu durchsuchenden Textdatei eingeben: ");
fileName = readString();
text = readFile(fileName);
System.out.print("\n Bitte Suchmuster eingeben: ");
pattern = readString();
int treffer = boyerMoore(text, pattern);
if (treffer >= 0)
System.out.println("\n Treffer an Position " + treffer + "\n");
else
System.out.println("\n \"" + pattern + "\" nicht enthalten\n");
}
}