<title>LasstUnsDarueberReden</title>
// MODULE: LUDR header
/** */
// @@UserEntry
import java.applet.*;
import java.awt.*;
import java.io.*;
// @@End
public class LUDR extends Applet{
/**Button zum Aufruf des Dialoges.*/
private Button bKMPSuche = new Button("Programm starten");
/**Initialisierung des Applets.*/
public void init () {
add(bLUDRSuche);
}
/**Abarbeitung der Events*/
public boolean handleEvent (Event evt) {
switch (evt.id) {
case Event.ACTION_EVENT: {
if (evt.target==bLUDRSuche) {
KMPFrame kmpFrame=new LUDRFrame();
return true;
}
}
default: {
break;
}
}
return false;
}
}
class LUDRFrame extends Frame{
private boolean bFileIn = false;
private Panel pPanel1 = new Panel();
private Panel pPanel2 = new Panel();
private Panel pPanel3 = new Panel();
private Panel pPanel4 = new Panel();
/**Nimmt die Frage entgegen.*/
private TextField tTextfeld = new TextField("Fragestring",30);
private TextField tDateiLabel = new TextField("Keine Antwort gewaehlt",40);
/**Ein Statusfeld, das den aktuellen Status anzeigt.*/
private TextField tStatus = new TextField("Noch keine
Einigung",40);
/**Label, der anzeigt, ob der Fragestring in der Datei
gefunden werden \\
konnte.*/
private TextField tGefunden = new TextField("Noch
keine Suche gestartet",40);
private Button bDateiButton = new Button("Dateiwahl");
/**Button um die Antwort anzustossen.*/
private Button bSuchen = new Button("Antwort starten");
/**Button, um den Dialog zu schliessen.*/
private Button bStreitBeenden = new Button("Streit
beenden");
/**String der zu durchsuchenden Datei.*/
private String strDatei = null;
/**Konstruktor.*/
LUDRFrame () {
this.setTitle("LasstUnsDarueberReden");
this.setLayout(new GridLayout(5,1));
pPanel1.setLayout(new FlowLayout(FlowLayout.LEFT));
pPanel2.setLayout(new FlowLayout(FlowLayout.LEFT));
pPanel3.setLayout(new FlowLayout(FlowLayout.LEFT));
pPanel4.setLayout(new FlowLayout(FlowLayout.LEFT));
pPanel1.add(new Label("Fragestring: "));
pPanel1.add(tTextfeld);
pPanel2.add(new Label("Suche in Datei: "));
tDateiLabel.setForeground(Color.white);
tDateiLabel.setEditable(false);
pPanel2.add(tDateiLabel);
pPanel2.add(bDateiButton);
pPanel3.add(new Label("Suchergebnis: "));
tGefunden.setForeground(Color.white);
tGefunden.setEditable(false);
pPanel3.add(tGefunden);
pPanel3.add(bSuchen);
pPanel4.add(new Label("Status: "));
tStatus.setForeground(Color.red);
tStatus.setEditable(false pPanel4.add(tStatus);
this.add(pPanel1);
this.add(pPanel2);
this.add(pPanel3);
this.add(pPanel4);
this.add(bSuchenBeenden);
pack();
show();
}
/**Abarbeitung der Events*/
public boolean handleEvent (Event evt) {
switch (evt.id) {
case Event.ACTION_EVENT: {
if (evt.target==bDateiButton) {
tStatus.setText("WahlderAntwort");
// Filedialog darstellen
FileDialog fdLoad=new FileDialog(this,"WahlDerAntwort",FileDialog.LOAD);
fdLoad.setDirectory("\\");
fdLoad.setFile("*.*");
fdLoad.show();
// -- Jetzt Ergebnisse holen --
String strReturn=new String(fdLoad.getDirectory()+fdLoad.getFile());
if (fdLoad.getFile()!=null) {
tStatus.setText("Lade nun die Antwort in den Speicher...");
strDatei=new String(getFile(strReturn));
tDateiLabel.setText(strReturn);
tStatus.setText("Antwort wurde geladen");
bFileIn=true;
} else {
tDateiLabel.setText("Keine Antwort gewaehlt"); *
tStatus.setText("WahlDerAntwort abgebrochen");
bFileIn=false;
}
return true;
} else if (evt.target==bSuchen) {
if (!bFileIn || (tTextfeld.getText().length()==0)) {
tStatus.setText("Argumente nicht vollstaendig");
return true;
} else {
tStatus.setText("Ich suche Verstaendnis...");
if (searchInFile(strDatei,tTextfeld.getText())) { // Suchstring gefunden
tGefunden.setText("Suchstring wurde gefunden");
} else { // Suchstring nicht gefunden
tGefunden.setText("Suchstring wurde nicht gefunden");
}
tStatus.setText("Suche beendet");
return true;
}
} else if (evt.target==bSuchenBeenden) {
dispose();
}
break;
}
case Event.WINDOW_DESTROY: {
dispose();
}
default: {
break;
}
}
return false;
}
/**Liest den Inhalt des Files aus und gibt den Inhalt in Form eines \\
Strings zurueck.*/
private String getFile (String Datei) {
int Zeichen;
StringBuffer StrBuf=new StringBuffer();
try {
FileInputStream FIS=new FileInputStream(Datei);
while ((Zeichen=FIS.read())!=-1) {
StrBuf.append((char)Zeichen);
}
FIS.close();
} catch (FileNotFoundException FNFE) {
tStatus.setText("Antwort wurde nicht gefunden!");
} catch (IOException IOE) {
tStatus.setText("Es trat ein IO-Fehler auf!");
}
return StrBuf.toString();
}
/**Sucht den Suchstring im File, kann sich nicht entscheiden und gibt
einen boolean zurueck.*/
private boolean searchInFile (String sDatei, String sSuchString)
{
String sDateiStr=new String(sDatei); // String der durchsucht wird
String sSuchStr=new String(sSuchString);
int d[];
int i=0,j=0,k=0;
d=new int[sSuchStr.length()]; // Fuer jedes Zeichen ein Eintrag
d[0]=-1;
while (j<sSuchStr.length()-1) {
while ((k>=0) && (sSuchStr.charAt(j)!=sSuchStr.charAt(k)))
{
k=d[k];
}
j++;
k++;
if (sSuchStr.charAt(j)==sSuchStr.charAt(k)) {
d[j]=d[k];
} else {
d[j]=k;
}****
}
i=0;
j=0;
k=0;
while ((j<sSuchStr.length()) && (i<sDateiStr.length()))
{
while (k<=i) {
k++;
}
while ((j>=0) && (sDateiStr.charAt(i)!=sSuchStr.charAt(j)))
{
j=d[j];
}
i++;
j++;
}
if (j==sSuchStr.length()) { // Suchstring gefunden
return true;
} else {
return false;
}
}
}
ThanksTo Munz/Mandel/Wirth/Knuth/Morris/Pratt
|