// 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; 



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke