Hallo,
mit der folgenden Funktion berechne ich eine String-Kongruenz. Die Strings müssen gleich lang sein und dürfen das Maskierungszeichen nicht enthalten.
Delphi-Quellcode:
function CongruenceStr(s: TStrings; mask: Char): String;
var
i, iPos: Integer;
t: String;
begin
if s.Count = 0 then
Result := '' else
begin
Result := s[0];
for i := 1 to Pred(s.Count) do
begin
t := s[i];
for iPos := 1 to Length(Result) do
if (Result[iPos] <> mask) and (t[iPos] <> Result[iPos]) then
Result[iPos] := mask;
end;
end;
end;
Der Vorteil ist, dass jede Zeile nur einmal extrahiert wird - die Kongruenz wird zeilenweise bestimmt und nicht spaltenweise. Das Ergebnis ist ein String, der für übereinstimmende Spaltenwerte das entsprechende Zeichen aufweist oder im anderen Fall das Maskierungszeichen.
Grüße vom marabu