Das ist ja mal ein tolles Beispiel, wie man nicht programmieren sollte.
Die Methode ist riesig und hat jede Menge Wiederholungen.
Ausserdem steckt noch auskommentierter Code als Störfeuer drin.
Ok, genug gelästert, hier der Weg zur Besserung.
Ich würde hier ein Bottom-Up-Design vorschlagen; also unten mit den kleinen Dingen beginnen und verbessern.
Ich greife mal diese Zeile raus, die vier Mal vorkommt:
Delphi-Quellcode:
if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
begin
Daraus lässt sich eine Funktion erstellen:
Delphi-Quellcode:
function CharIstSatzzeichen(c:char):Boolean;
begin
result := (c='.') or (c=',') or (c='!') or (c='?') or (c=':') or (c=';');
end;
Mit dem In-Operator lässt sich das noch etwas kompakter schreiben:
Delphi-Quellcode:
function CharIstSatzzeichen(c:AnsiChar):Boolean;
begin
result := c in ['.',',','!','?',':',';'];
end;
Im nächsten Schritt wird diese Funktion dann verwendet.
Aber damit noch nicht genug. Wir betrachten folgenden Code:
Delphi-Quellcode:
prgrammdb.DikNeuSatzEintrag.Last;
prgrammdb.DikNeuSatzEintrag.Insert;
prgrammdb.DikNeuSatzEintragDiktatID.Value:=prgrammdb.dikNeuEintragID.Value;
prgrammdb.DikNeuSatzEintragWort.Value:=prgrammdb.silbenSilbe.Value;
prgrammdb.DikNeuSatzEintragSatzID.Value:=j;
prgrammdb.DikNeuSatzEintragWortID.Value:=seObjekt1.wortID;
prgrammdb.DikNeuSatzEintragSilbenID.Value:=x;
prgrammdb.DikNeuSatzEintrag.Post;
Dieser Code muss "verschwinden", d.h. er muss in eine Methode wandern:
Delphi-Quellcode:
// Datensatz an Diktionary anhängen
procedure TdiktatNeuDLG.AddDikRecord(DikatID,Word,SatzID,WordID,SilbenID: ???);
Den Datentyp für die Parameter habe ich weggelassen; die kennst du selbst am Besten.
Eigentlich ist der Code noch an der falschen Stelle.
Er gehört zum Datenmodul (oder Formular) Tprgrammdb.