// Der folgende
Code ist kein Riesending und eigentlich müsste jeder
// das selbst stricken können. Da ich aber mehrmals per Mail danach
// gefragt wurde, stelle ich den Code nun doch hierher.
// Es geht darum, entweder ein bestimmtes Wort aus einem Text zu
// entfernen und die Anzahl der Stellen zu wissen, an denen das Wort
// gelöscht wurde
(Words = True),
oder einzelne Buchstaben aus einem
// Text zu entfernen und zu kontrollieren, ob dann noch Buchstaben
// übrig sind
(Words = False).
Das Letztere braucht man beispielsweise
// um Schüttelnamen mit dem Original zu vergleichen. Damit Sie wissen,
// was ich meine, hier vier kleine Beispiele:
// Welchen Beruf hat der Mann von RUTH MACHE ? (HUTMACHER)
// Welche Person verbirgt sich unter MARLENE KLAGE ? (ANGELA MERKEL)
// Wer könnte den Fluch KOBRA CARAMBA benutzen ? (BARRACK OBAMA)
// Wohin muss ANKE FLOUR ? (FRAUENKLO)
// Getestet mit D4 unter XP
function MinusStr(Minuend, Subtrahend: string; Words: boolean;
out txt: string): integer;
var
p, i: Integer;
begin
result := 0;
if Words then begin
txt := Minuend;
repeat
p := ansipos(ansilowercase(Subtrahend), ansilowercase(txt));
if p = 0 then break;
delete(txt, p, length(Subtrahend));
inc(result);
until false;
end else begin
txt := StringReplace(Minuend, #32, '', [rfReplaceall]);
Subtrahend := ansilowercase(StringReplace(Subtrahend,
#32, '', [rfReplaceall]));
result := abs(length(Subtrahend) - length(txt));
if result <> 0 then exit;
for i := 1 to length(Subtrahend) do begin
p := ansipos(Subtrahend[i], ansilowercase(txt));
if p > 0 then delete(txt, p, 1);
end;
result := length(txt);
end;
end;
// Beispielaufrufe
var
ok: integer;
Rest: string;
procedure TForm1.Button4Click(Sender: TObject);
begin
ok := MinusStr('Egon Benger', 'Regenbogen', false, Rest);
if Rest = '' then
showmessage('Übereinstimmung')
else
showmessage(inttostr(ok) + ' Buchstabe(n) übrig');
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ok := MinusStr('Donaudampfschifffahrtsgesellschaftskapitän',
'Gesellschafts', true, Rest);
if ok = 0 then
showmessage('Keine Übereinstimmung gefunden')
else
showmessage(inttostr(ok) + ' Wort(e) gelöscht'#13#10 + 'Rest: ' + Rest);
end;
|